#1 27. Juli 2009 XML vs. HTML-Template Caching Hi, ich arbeite momentan an nem CMS und mach mir ein wenig gedanken über ein Caching System, dass die Datenbank (falls es mal wirklich zu einem großen Nutzen der Seite kommen sollte) entlasten soll. Dabei stellt sich mir die Frage: XML oder gleich den HTML-Template Code cachen? Meine Vorstellung [XML]: - XML von PHP einlesen lassen - PHP nimmt eine Templatevorlage und füllt platzhalter mit den XML-Daten - PHP gibt aus Meine Vorstellung [HTML-Template]: - PHP liest HTML-Template - PHP gibt aus da würde man ja genau einen Step sparen.. jedoch hab ich mit XML nicht so viel Erfahrung und weiss nicht wie schnell es arbeitet. Vorschläge? + Multi-Zitat Zitieren
#2 27. Juli 2009 AW: XML vs. HTML-Template Caching wenn du eh mit templates arbeitest, cache doch einfach die "platzhalter" html als ganzes cachen is meiner meinung nach nur in fixen projekten sinnvoll. wenn du mal was am layout änderst oder im css, dann musst du jedes mal den kompletten html-cache leeren. + Multi-Zitat Zitieren
#3 27. Juli 2009 AW: XML vs. HTML-Template Caching jaein.. Bei mir würde das z.b. im falle einer news so aussehen HTML: <div class="news"> <div class="title">Mein Titel</title> <div class="date">Datum und son kram</div> <div class="content">Mein Inhalt</div> </div> Dann wollte ich so viele News in eine Cache-Datei schreiben wie im System ausgewählt hab. Quasi "Zeige die 5 neusten News an" Da ich dann alles mit CSS gestalte wäre das schon mal designunabhängig + Multi-Zitat Zitieren
#4 27. Juli 2009 AW: XML vs. HTML-Template Caching sagst du, aber was wenn du du im markup nen neuen div-kontainer benötigst? oder irgendwas wo anders positionieren willst? BÄM cache löschen -> alles neu cachen. mit xml-datein is das was anderes. ich würde an deiner stelle aber lieber die php-nativen methoden "serialize" und "unserialize" verwenden. geht schneller als extra nen xml-parser anschmeissen. im übrigen sind die cache-files dann auch kleiner. + Multi-Zitat Zitieren
#5 27. Juli 2009 AW: XML vs. HTML-Template Caching mh muss ich dir recht geben Von serialize und unserialize hab ich bis heute nie was gehört Man lernt wohl nie aus.. habs mir mal grob angeschaut PHP: serialize - Manual Werd aber noch nich ganz schlau draus.. ich google mich mal durch die Seiten, danke Edit: Hab mir mal n beispiel angeschaut PHP: <? php $zeichenkette = "Hallo" ; $sess_data = serialize ( $zeichenkette ); echo unserialize ( $sess_data ); ?> Nach deiner Vorstellung müsste ich quasi $sess_data in eine Datei speichern und den Inhalt dieser Datei in einen String laden und mit unserialize auslesen? + Multi-Zitat Zitieren
#6 27. Juli 2009 AW: XML vs. HTML-Template Caching ich würde einfach mal nur html cachen. css braucht man nicht unbedingt cachen, es sei dem das design ist jedes mal neu. Code: $daten = hole_daten(); $cache_string = ' <html> <titel>{$daten->titel}</titel> </html>'; // speichern $handle = fopen('name_der_seite.htlm','w'); fwrite($handle, $cache_string); fclose($handle); + Multi-Zitat Zitieren
#7 27. Juli 2009 AW: XML vs. HTML-Template Caching css cachen wäre auch non-sense.. dann wäre die grundidee von CSS hin und ich könnt gleich alles mit tables machen Ich denke ich werd erst mal versuchen nur die Platzhalter zu cachen und es mit der serialize methode probieren (würde mich mal interessieren wie das funktioniert) Wenn dadurch auch noch die Datengröße kleiner wird, wäre das wohl recht effektiv + Multi-Zitat Zitieren
#8 27. Juli 2009 AW: XML vs. HTML-Template Caching ich glaube mit serialize kannst du array zusammenpacken: Code: $daten = array( 'titel' => 'bla', 'text' => 'ahhh' ); serialize($daten); // daraus wird ne zeichenkette: (a:0:'blal') u.s.w // die musst du ja trozdem irgendwo speichern unserialize($daten); // hast du das array wieder + Multi-Zitat Zitieren
#9 27. Juli 2009 AW: XML vs. HTML-Template Caching Danke aber hab schon 1-2 hübsche methoden geschrieben PHP: public function AddString ( $str ) { $this -> filestring [] = serialize ( $str ); } und PHP: public function FileContent () { foreach( $this -> filestring as $output ) { $array [] = unserialize ( $output ); } return $array ; } natürlich gibts im hintergrund noch viel mehr aber ich werd jetzt nicht den ganzen klassen code posten (er is ja nich ma fertig ) Aufrufen kann ichs dann quasi mit PHP: $meinarray = $cache -> FileContent (); echo $meinarray [ 0 ][ 'title' ];echo $meinarray [ 1 ][ 'title' ];echo $meinarray [ 1 ][ 'content' ]; etc. Denke aber so wird das funktionieren + Multi-Zitat Zitieren
#10 28. Juli 2009 AW: XML vs. HTML-Template Caching es mag sein dass dahinter mehr steckt, aber cachen bedeutet ablegen/speichern. dazu brauchst du methoden zum überprüfen ob die cache-datei existiert sowie ausgeben bzw. neugenerieren von cache. PHP: $c = new cache (); // wenn es nicht exisiert if(! $c -> exists ( "seite.html" )) { $c -> Daten_hinzufuegen (); $c -> Cache_speichern (); $c -> Cache_ausgeben ();} else { // und wenn doch dann $c -> Cache_holen (); $c -> Cache_ausgeben ();} mit serialize kannst du zwar array in stringkette umwandeln, aber du musst trozdem die daten irgendwo abspeichern. ansonsten lässt du deine andwendung immer arbeiten obwohl das cachen das ersparren soll und noch eine kleine bemerkung zu methode AddString($str): PHP: public function AddString ( $str ) { $this -> filestring [] = serialize ( $str ); // bsp: // c->AddString("test"); // heisst // echo $this->filestring[0]; -> test } $meinarray = $cache -> FileContent ();echo $meinarray [ 0 ][ 'title' ]; // wie kannst du titel aufrufen wenn es nicht mal existiert// dann würde ich folgendes machen: // dann musst deine methode etwas erweitert werden: public function AddString ( $name , $str ) { $this -> filestring [][ $name ] = serialize ( $str ); } // jetzt kannst du mit echo $meinarray [ 0 ][ 'title' ]; // ausgeben + Multi-Zitat Zitieren
#11 28. Juli 2009 AW: XML vs. HTML-Template Caching Ich danke dir, dennoch kann ich nur sagen -> Dahinter steckt noch mehr, ein kleiner überblick über meine Methoden.. PHP: function __construct ( $_file , $_maxelements ); public function AddString ( $str )public function FileContent ()public function Save () private function Create ()private function LoadFile ()private function CheckFile ()private function Open ()private function Close () Zu der sache ob man title kennt bzw. ob es existiert... die Frage erübrigt sich wenn man das Script vor sich hat, das war nur ein Beispiel. wenn ich jetzt die news.php habe und dort daten aus der DB hole, weiß ich (als programmierer) das ich in AddString(array('title' => 'bla') habe, das ist einfach die struktur in meinem Code Quasi news.php wäre in dem fall dafür zuständig die tmp datei zu generieren und auch aus ihr zu lesen von daher wird es sofort ersichtlich was für platzhalter ich mit welchen informationen ersetzen muss str_replace("{title}", $array[irgendeinzaehler]['title'],$text) Dennoch danke Edit: übrigens ist das Script schon getestet und es funktioniert voll zu meiner zufriedenheit Edit2: Wie ich das sehe könnte ich auch mit deiner AddString variante nur schwer noch Arrays in AddString $str jagen PHP: $news = array( 'title' => $assoc [ 'title' ], 'content' => $assoc [ 'content' ]); $cache -> AddString ( $news ); so wirds bei mir aussehen (wieder nur ein beispiel und kein effektiv einsatz) + Multi-Zitat Zitieren