Sönke Tesch: "HTTP-Cache" für PHP-Applikation

Beitrag lesen

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.

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

Eben.

Ich weiß, dass so eine user-spezifische Anwendung nicht gerade optimal zum cachen ist, aber meine Scrite erzeugen teilweise richtig viel Last, da sie oft sehr große HTML-Tabellen erzeugen, on-the-fly aus verschiedenen Datenbank-Tabellen zusammengefügt. Wenn die DB, dann richtig voll ist wird das sehr lahm.

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).
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.

Zum zweiten halte ich den Nutzen eines persönlich formatierten Datums  (oder ähnlicher Kleinigkeiten) für äußerst fragwürdig. 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. Sowas belastet nicht nur unnötig den Server, es verkompliziert möglicherweise auch die Einstellungsseite. Lohnt sich das wirklich?

Wenn ja, besteht vielleicht die Möglichkeit, diese persönlichen Elemente per Javascript erst auf der Benutzerseite einzubauen. Die Seite enthält nur noch die Rohdaten, von PHP in einen Javascript-Bereich ausgegeben (etwa 'var datum = new Date(1,2,3);'), die Einstellungen stecken in einem Cookie im Browser, eine Javascript-Funktion bastelt dann daraus beim Benutzer die gewünschte Ausgabe. Trotzdem bitte nicht den <noscript>-Bereich mit den jeweiligen Daten in einem Standardformat vergessen!

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). 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.

Gruß,
  soenk.e