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

Beitrag lesen

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

Ja, aber um das zu ermitteln muss ich eine Verbindung zur DB aufbauen, abfragen senden und Rückgabewerte analysieren...

SQL> select unix_timestamp(max(änderung)) from tabelle;
  PHP> if ($sql_änderung <= $browser_änderung)
           not_modified();

Finde ich gegenüber dem Erstellen einer "komplexen HTML-Tabelle" ganz und gar nicht aufwendig. Aber genau da besteht vielleicht auch Dein Problem: Du wirfst alles in einen Pott, ist ein Teil des PHP-Skriptes nicht zu gebrauchen, muß gleich der ganze PHP-Interpreter über Bord (übertrieben ausgedrückt).

Warum sollte ich das alles nicht vermeiden - wenn es doch geht?

Siehst Du, "wenn es doch geht". Nur weil es geht, muß es ja noch lange nicht sinnvoll sein, oder?

Ich kenne die Killerapplikation nicht, an der Du werkelst, aber ich habe den Eindruck, daß Du versuchst, geradezu krampfhaft mit Kanonen auf Spatzen zu schießen, und zwar in zweierlei Hinsicht:

1. Du scheinst gar keine genaue Vorstellung davon zu haben, wie groß das Ziel ist und wie es sich bewegt und bestellst deshalb einfach mal das größte, modernste, austattungsreichste Waffensystem, das Du gerade kriegen kannst.

Warum? Hast Du überhaupt mal nachgemessen, wie lange es dauert, bis PHP Dein Skript ausführbar vorliegen hat? Das Problem an Deinem Skript ist das Zusammensuchen und Aufbereiten der Daten, nicht das Laden des Skriptes ansich. Das hast Du jedenfalls so mit der Aussage "je größer die Datenbank, desto langsamer die Ausgabe" behauptet.

Anstatt nun erstmal diesen aufwendigsten Teil zeitweise (also per Last-Modified) überflüssig zu machen, baust Du noch eine detailreiche Konstruktion obendrauf, um gleich das ganze Skript zu eliminieren. Damit schießt Du IHMO weit über das Ziel hinaus und baust Dir gleichzeitig haufenweise Fehlerquellen ein (wie Du ja selbst bemerkt hast).

Der Anteil an der gesamten Abwicklungsdauer, den PHP zum Laden des Skriptes beansprucht, mag beim Endbenutzer mit einigen hunderstel oder meinetwegen zehntel Sekunden vielleicht noch messbar sein, aber ich kann mir nicht vorstellen, daß er noch irgendwie _merk_bar ist. Von daher scheint mir der Aufwand, den Du betreibst, sinnlos. Größerer Aufwand, insbesondere wenn er sich auf verschiedenste Komponenten verteilt, bedeutet aber immer auch mehr Fehlerquellen - und da wird es dann nicht nur sinnlos, sondern arg problematisch. Aber das ist Geschmackssache, siehe ganz oben.

2. Du versuchst, mit eine bestimmte Aufgabe zu erledigen, bedienst Dich dabei aber eines für diesen Zweck unzureichenden Werkzeugs.

Warum? Deinen Ausführungen nach zu urteilen ist die ganze Angelegenheit fürchterlich komplex. Interpretersprachen waren noch nie für komplexe Aufgaben zu gebrauchen und werden es nie sein, egal wie c00l das Dingens gerade ist, insofern benutzt Du mit PHP möglicherweise schlichtweg das falsche Werkzeug. Oder, so würden es die SelfSpezialisten sehen, Dein Server ist zu lahm. Kommt im Endeffekt auf das gleiche raus.

Was habe ich von statischen HTML-Seiten? Was ist daran besser die im Server-Cache zu lagern, als im Cache des Client?

Das hat überhaupt nichts mit einem Server-Cache zu tun (der in den meisten Webservern eh nicht vorhanden ist), eine statische Seite muß schlichtweg nicht bei jedem Aufruf neu erstellt werden. Und der Webserver ist zudem in der Lage, den ganzen Tralala mit Last-Modified ganz von alleine zu handhaben.
Es mag Dir entsetzlich simpel vorkommen, aber das ist letztenendes genau das, was Du haben willst: keine Datenbankaufrufe, kein PHP, nicht einmal mod_rewrite. Daß auch solche statischen Seiten (in einem gewissen Rahmen) persönlich eingerichtet werden können, schrieb ich ja bereits.

Gruß,
  soenk.e