Christian Kruse: Caching von dynamisch erstellten aber dann statischen Seiten

Beitrag lesen

Hallo Matthias,

ich lasse durch ein PHP-Script HTML-Dateien in Abhängigkeit bestimmter Parameter erzeugen. Dies ist mit einigen Abfragen an eine Datenbank verbunden, dauert also ein paar Zehntelchen. Für dieselben Parameterwerte ergibt sich aber immer dasselbe HTML-Dokument, also bräuchte man dieses nicht jedes mal neu erstellen zu lassen.

Solange du nicht ernsthaft an Last-Probleme stösst würde ich das Caching weglassen. „Premature optimization is the root of all evil.“

Im alten SELFHTML-Archiv wurden die HTML-Seiten selbst gespeichert. Ist das dieselbe Vorgehensweise?

Im wesentlichen ja.

Funktioniert dies

/* Mag der User-Agent gezippte Daten? */
        if ( false===strpos($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip') ) {
            /* Falls nicht packen wir nämlich für Ihn aus: */
            exec('cat '.FTX_CACHE_FILE.'|gunzip');

(Zeile 4) unabhängig vom Server oder kann es da Schwierigkeiten geben?

Das kann Schwierigkeiten geben, abhängig vom Userland (nicht überall ist gzip installiert) und dem Environment (die PATH-Variable ist nicht selten leer). Ersteres würde ich ignorieren weil eher unwahrscheinlich, zweiteres ist aber schon öfter der Fall, da würde ich mit absoluten Pfadangaben (/bin/gunzip und /bin/cat) arbeiten.

Aber eigentlich will man das auch nicht über die Shell lösen (und schon gar nicht mit cat, gunzip --to-stdout existiert), sondern über PHP selber. Da extra eine Shell zu starten verschwendet einen grossen Teil der gewonnenen Performance wieder.

Wenn es sich um HTML-Ressourcen handelt, brauche ich mich doch eigentlich nicht darum zu kümmern, ob die Seite gezippt wird? Das handeln doch der anfragende UA und der Server miteinander aus?

Wenn es sich um reine HTML-Ressourcen handelt, kann es Sinn machen, die Dateien vorzukomprimieren, sowohl Apaches mod_deflate als auch nginx' gzip-Implementierung unterstützen das (um mal zwei der am häufigsten genutzten Webserver zu nennen). Aber das hängt davon ab, ob du viel Traffic erwartest oder nicht. Ich würde idR davon Abstand halten, die meisten Seiten brauchen das nicht und die doppelte Datenhaltung muss berücksichtigt werden und erhöht so die Komplexität.

LG,
CK