Andreas Korthaus: "HTTP-Cache" für PHP-Applikation

Beitrag lesen

Hallo!

Also ich habe mir mal überlegt, wie ich mit dem Apachen User-spezifisches HTML-Output(durch PHP-Scripte erzeugt) cachen kann, ganz ohne überhaupt den PHP-Interpreter zu starten, da sich nur so ein wirklich deutlicher Caching-Effekt einstellt.

Das halte ich so alleine für fraglich.

Die Idee habe ich hierdurch bekommen:
http://www.incremental.de/talks/phpconf-2003-caching/fehler_php_cache/durchsatz.html
http://www.incremental.de/talks/phpconf-2003-caching/lighttpd_cache/cml2.html

Wenn ich doch in der Lage bin noch in mod_rewrite eine entscheidung zu treffen ob gecached werden soll, wieso sollte ich das nicht tun?
mod_rewrite verwende ich sowieso, was dazu kommt sind lediglich 4 Mustervergleiche. Und wenn mod_rewrite eh geladen/verwendet wird, dann wird das doch _sehr_ wenig ausmachen, oder? Dazu kommt dass keine Datei geladen wird, sondern am besten der Firesystem-Check im RAM erfolgen kann, wenn ich die Cache-Dateien in den RAM lege, und da die alle keinen Inhalt haben, wird das auch sehr wenig Platz kosten.

Dazu kommt dass die Datei nicht mit übertragen werden muss, sondern nur der Header. Mir sind die bekannten Caching-Mechanismen durchaus bekannt. Ich dachte nur es wäre eine gute Idee wenn möglich das Caching noch aus PHP auszulagern.

Das Problem dabei: woher kann der Apache wissen ob sich das HTML-Output eines PHP-Scriptes geändert hat?

Eben.

Das lässt sich ja über das Dateisystem genauso gut lösen wie über irgendeinen PHP-Cache.

Dann solltest Du zuerst dort ansetzen und den Aufbau der Datenbanktabellen überdenken, sowie prüfen, ob die Indizes passen (dazu kann auch zählen, daß es nicht zu viele sind).

Klar. Aber bestimmte Dinge lassen sich nur sehr schlecht optimieren. Außerdem ist die Applikation recht komplex, was dazu fürhrt, bevor ich überhaupt irgendwelchen Code ausführe kommen zig DB-Agfragen, es werden zig Objekte erzeugt..., was ein Framework für eine größere  Applikation eben so mit sich bringt.

In diesen Zusammenhang solltest Du auch schauen, ob Deine Datenbank einen Spaltentyp kennt, der automatisch die letzte Änderungszeit des jeweiligen Datensatzes speichert (z.B. bei MySQL TIMESTAMP). Mit dessen Hilfe reicht ein einfacher Abgleich mit der vom Browser gesendeten Last-Modified-Angabe, um das Skript mit der Meldung "nicht geändert" sofort wieder abbrechen zu können.

Ja, aber um das zu ermitteln muss ich eine Verbindung zur DB aufbauen, abfragen senden und Rückgabewerte analysieren...
Warum sollte ich das alles nicht vermeiden - wenn es doch geht? Es funktioniert in der Tat.

Zum zweiten halte ich den Nutzen eines persönlich formatierten Datums  (oder ähnlicher Kleinigkeiten) für äußerst fragwürdig.

Das ist nunmal Pflicht. Man kann auch eine andere Sprache einstellen oder das allgemeine Zahlenformat ändern. Das ist eine "must-have" Feature.

Nicht, daß es niemand benutzen würde, die Frage ist, ob es überhaupt jemanden interessieren würde, wenn diese Option nicht vorhanden wäre - sozusagen eine Sack-Reis-Option.

Wenn der Kunde amerikaner ist und kein amerikanisches Datum hat sieht das nicht wirklich gut aus. Anders herum sicher nicht so schlimm.

Sowas belastet nicht nur unnötig den Server, es verkompliziert möglicherweise auch die Einstellungsseite. Lohnt sich das wirklich?

es ist Pflich, Punkt. ;-)

Direkt daran anschließend ist dann das, was Du bereits praktizierst, zu nennen, allerdings in abgespeckter Form: Das Skript schreibt eine statische HTML-Seite auf die Platte, die dann entweder direkt per URL vom Server ausgeliefert wird oder über den Umweg des Skriptes (in jedem Fall ohne den ganzen mod_rewrite-Krams, das muß nicht unbedingt besser sein, als ein PHP-Skript zu laden).

Wieso das? zum einen wird die Rewrite-Engine ohnehin geladen, und des weiteren ist das doch schon ein erheblicher Unterschied in der Komplexität. Was habe ich von statischen HTML-Seiten? Was ist daran besser die im Server-Cache zu lagern, als im Cache des Client?
Ich überlege nur HTML-Cache dazu zu verwenden für Teile die sich seltener ändern und die bei allen Usern gleich sind.

Diese Seite ist eine Standardversion, ohne jegliche persönlichen Schnörkel. Es würde mich nicht wundern, wenn ein Gutteil des Bedarfs bereits von dieser statischen Seite gedeckt wird.

es ist aber so.

Grüße
Andreas