[PHP] XML vs. HTML-Template Caching

Dieses Thema im Forum "Webentwicklung" wurde erstellt von Flyde, 27. Juli 2009 .

Schlagworte:
  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?
     
  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.
     
  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
     
  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.
     
  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?
     
  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);
    
     
  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
     
  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
    
     
  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
     
  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
     
  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)
     
  12. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.