[Templates] Compilieren oder cachen ?

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Templates] Compilieren oder cachen ?

    Hallo,

    ich benutze die Templateengine smarttemplate http://smarttemplate.sourceforge.net/

    Sie benutzt folgenden Mechanismus, um Anfragen schneller abwickeln zu können: Die Template wird in eine php-Datei kompiliert, die für eine bestimmte Zeit gespeichert bleibt. Wird in dieser Zeit die Seite wieder angefragt, wird statt die Template erneut zu parsen, direkt die php-Datei ausgeführt. Diese compilierte php-DAtei sieht dann also aus wie hard-coded ohne templates halt.

    Jetzt stellt sich mir die Frage: Kann man da nicht eigentlich noch einen Schritt weitergehen und solche Seiten (Startseite zum Bleistift), die selten geändert werden, nicht gleich komplett als HTML-Ausgabe speichern und dann zum client schicken? Also nicht nur nach php compilieren, sondern direkt nach html parsen und speichern?

    Würde das performancemäßig was bringen?
    Wie könnte man das mit smarttemplate realisieren ?
    Zuletzt geändert von PhilippM; 17.06.2006, 16:43.

  • #2
    könnte man.
    und es würde.

    ob es mit smarttemplate geht, weiß ich nicht, musst du in der doku schauen.
    lässt sich aber auch manuell recht schnell basteln.

    Kommentar


    • #3
      stehen in der regel aber irgendwelche dynamischen inhalte (forumübersicht, Bannerrotation, counter/useronline, ...) im weg. Ansonsten ist es aber natürlich sehr zu empfehlen.

      Kommentar


      • #4
        ja natürlich gibt es in smarty cache unabhängig von vorcompillierten php dateien.
        $smarty-> new Smarty;
        $smarty->caching=true;
        wenn du cache für eine bestimmte dauer einstellen möchtest
        $smarty->caching=2;
        $smarty->cach_lifetime=900;//cachen für 15 minuten
        Slava
        bituniverse.com

        Kommentar


        • #5
          Danke für die Antworten!

          okay, also es würde was bringen.

          @slava: Ich spreche von smarttemplate, nicht von Smarty !! Smarty hat mir zuviel unnötigen Ballast.


          Die Doku (leider nur ein sehr unvollständiges Wiki) sagt folgendes:

          void use_cache ( [mixed key] )

          Activates the built in output cache. Checks if the executed script (ref. $_SERVER[REQUEST URI]) has produced any output whithin a certain period of time. If so, use_cache sends the cached page to the standard output (Browser) and terminates any further script execution.

          If no valid output is available, use_cache activates the PHP output buff and returns to the script form which it was called. During the following script execution, use_cache captures all output that is send to the browser and stores it in a temporary cache file. The filename of this cach file is a unique key that is created by modulating the current script filename, its GET-parameters (REQUEST_URI) and the optional key parameter.
          Heißt das jetzt, das HTML-code gecached wird oder wieder nur compiliertes Template (PHP-Code). Ich blick da nicht ganz durch.

          Kommentar


          • #6
            ups

            bitte um entschuldigung wegen falschen informationen.
            Slava
            bituniverse.com

            Kommentar


            • #7
              Der Cache speichert die Ausgabe, die an den Browser gesendet wird. Also kein PHP, es sei denn, du gibst PHP aus, was aber dann nicht mehr interpretiert werden würde, sondern as-is aus dem Cache an den Client geht.

              Hättest du mit einem Test aber leicht selbst herausfinden können - einfach mal use_cache() in ein Script eingebaut, aufgerufen und das Cache-File angeschaut.

              Kommentar


              • #8
                THX @ onemorenerd

                Das löst ja dann mein Problem. Einfach use_cache und es macht genau das, was ich mir vorgestellt habe.

                Kommentar


                • #9
                  During the following script execution, use_cache captures all output that is send to the browser and stores it in a temporary cache file.

                  Kommentar


                  • #10
                    und auch in quelcode sofort zu sehen
                    PHP-Code:
                     if ((time() - filemtime($this->cache_filename)) < $this->cache_lifetime)
                      {
                      
                    readfile($this->cache_filename);
                      exit;
                     }
                    }
                    ob_start( array( &$this'cache_callback' ) );


                    //und dann
                    function cache_callback $output )
                    {
                      if (
                    $hd = @fopen($this->cache_filename'w'))
                       {
                        
                    fputs($hd,  $output);
                        
                    fclose($hd);
                       }
                      return 
                    $output;

                    was ich aber entdeckt habe, dass ob_start mit parameter arbeiten kann.
                    das steht nicht in documentation, aber in einem kleinem beispiel unten.
                    http://de2.php.net/manual/de/functio...tart.php#61057
                    Slava
                    bituniverse.com

                    Kommentar


                    • #11
                      das sagen nur leute, die sich auf die deutsche übersetzung verlassen http://de2.php.net/manual/en/function.ob-start.php

                      Kommentar


                      • #12
                        Original geschrieben von TobiaZ
                        das sagen nur leute, die sich auf die deutsche übersetzung verlassen http://de2.php.net/manual/en/function.ob-start.php
                        tatsächlich
                        auf english stehen parameter drin!!!
                        auf deutsch nur void!!!
                        also muss ich doch dokumentation in feindlicher sprache anschauen
                        Slava
                        bituniverse.com

                        Kommentar


                        • #13
                          Es gibt jede Menge Unterschiede zwischen dem originalen englischen Manual und dessen deutscher Übersetzung. Vermutlich ist die deutsche dabei noch eine der besseren Übersetzungen ...

                          Da die Kommentare aber ohnehin in englisch sind und manchmal mehr Information enthalten als der Text obe drüber, sollte man sowieso des Englischen mächtig sein, wenn man nichts verpassen will.

                          Kommentar


                          • #14
                            Original geschrieben von Slava
                            und auch in quelcode sofort zu sehen
                            Tja ich nehme das Geheimhaltungsprinzip der OOP nunmal ernst. Ich will nur wissen, was die Objekte tun, nicht wie.

                            Kommentar


                            • #15
                              Original geschrieben von PhilippM
                              Tja ich nehme das Geheimhaltungsprinzip der OOP nunmal ernst. Ich will nur wissen, was die Objekte tun, nicht wie.
                              Die Idee finde ich gut, aber auf meine weise habe ich Antwort auf deine Frage schneller als du gefunden.
                              Ausserdem habe ich parameter in ob_start entdeckt.
                              Und was noch!
                              Objecte, die nicht gut genug documentiert sind, oder wie in deinem Fall nicht ausreichend Informationen liefern, bringen für fremde Menschen kaum Vorteile und sind damit als Haufen unbekannten code-fragmenten zu betrachten.
                              In manchen Fällen ist sogar neuprogrammieren leichter als in Logik von anderen Menschen einzusteigen.
                              Slava
                              bituniverse.com

                              Kommentar

                              Lädt...
                              X