Mailinglisten-Archive |
Christian Cartus schrieb am Mittwoch, den 16. September 1998: > machs viel einfacher. [...] > wir haben den php-prepozessor installiert, der uns bestimmte seiten > vorberechnet und den reinen html-code ausspuckt. Meinst Du mit "php-preprozessor" das normale PHP, das man sich als stand-alone-Programm (alias CGI-Skript) oder als Apache-Modul übersetzen kann - oder meinst Du etwas anderes? Falls Du den ersten Fall meinst, hier ein paar Bemerkungen dazu: Diese Lösung, alle PHP-nutzenden Seiten einfach nur einmal erzeugen zu lassen und dann als totes Stück HTML-Text abzuspeichern, ist zwar einfach und schnell, hat aber auch Nachteile: - Bei Änderungen sowohl im Quelltext der PHP-Seiten als auch bei Änderungen in den benutzten Datenbanken muß man die Seitenerzeugung neu starten. Wenn dann aber nicht immer alle Seiten wieder neu erzeugen werden sollen, muß man auch noch Informationen über die Datenabhängigkeiten verwalten. - Besonders bei mehrfach parametrisierten PHP-Seiten ergeben sich sehr viele HTML-Dateien mit entsprechend hohem Speicherbedarf, weil in dem Konzept für jeden konkreten Parametervektor eine eigene HTML-Datei erzeugt werden muß. - Da die letztendlich von der Außenwelt abgerufenen WWW-Dokumente nur noch HTML-Dateien sind, kann der WWW-Server vermutlich nur eine "Last-Modified:"-Angabe (gemäß Änderungsdatum der Datei erzeugen). Wenn aber, wie Nicolay Mausz schreibt, schon bekannt ist, wann sich gewisse Daten ändern werden, so würden "Expires:"-Header das externe Caching deutlich verbessern - und somit die Gefahr verringern, daß die Leser ständig veraltete Kopien aus den Caches zu sehen bekommen, wie es in Eurer Lösung leicht vorkommt ... Wenn man den HTML-Dateien aber flexibel solche Header mitgeben will (kann man z.B> beim Apache ja durchaus machen), ist das schon wieder etwas Aufwand. Aufwand, den man vielleicht gleich in diese Lösung stecken könnte ... :) Meine Idee: Man verstecke den eigentlichen WWW-Server (auf dem Apache/PHP läuft) hinter einem WWW-Proxy-Cache, welcher nach außen als WWW-Server auftritt. Das heißt also, man trennt einfach Erzeugung und Caching! Vorteile: - Auf der Seite der Erzeugung bleibt alles (nahezu) beim Alten. - Auf der Seite des Cachings kann man bereits vorhandene und bewährte Software wie z.B. Squid (oder Apaches Proxy-Modul) verwenden, die ihre ureigene Aufgabe - das Caching - natürlich recht gut machen. - Insgesamt ergibt sich dadurch eine leichte und wenig fehlerträchtige Wartung. Damit die Caching-Seite auch vernünftig arbeiten kann, muß man auf Seiten der PHP-Seiten nur darauf achten (wie aber eigentlich auch sonst immer!), daß man in seinen PHP-Skripten passende "Last-Modified:"- und "Expires:"-Header erzeugt. Konkret also: man bastelt sich eine PHP-Funktion, die sich sowohl das letzte Änderungsdatum der jeweiligen PHP-Quelldatei ansieht als auch die letzten Änderungsdaten derjenigen Datensätze (oder Tabellen oder Datenbanken, je nach gewünschter bzw. möglicher Genauigkeit), die in Datenbankabfragen dieser PHP-Seite benutzt werden. Das jüngste Datum ist dann das gesamte "Last-Modified:". Das Datum für eine "Expires:"- Zeile holt man sich dann evtl. aus einer Datenbank oder hat irgendeinen Berechnungs-Algorithmus dafür. Damit hat man das Caching für den Normalfall schon perfekt organisiert - und sogar sehr effizient. Denn es werden nur die Seiten wirklich erzeugt (und dann auch gleich im Cache gespeichert), die konkret angefordert werden. Somit wird der für's Caching zur Verfügung stehende Speicherplatz sehr effizient genutzt. Nur in dem Fall, daß Seiten sich doch mal vor ihrem "Expires:"-Datum ändern müssen (oder wenn gleich gar keines angegeben werden konnte), muß man in den Cache eingreifen und diese Seite "manuell" aus dem Cache herausnehmen. Da man den Cache aber selber betreibt, sollte das eigentlich kein Problem sein. Da ich selber bisher noch keinen Squid betrieben habe, weis ich nicht sicher, ob damit die Aufgabe lösbar ist, aber ich nehm's mal stark an. Ciao, Martin -- Martin Ramsch <m.ramsch_(at)_computer.org> <URL: http://ramsch.home.pages.de/ > PGP: 0xE8EF4F75, 52 44 5E F3 B0 B1 38 26 E4 EC 80 58 7B 31 3A D7 Alle Verallgemeinerungen sind Scheiße!
php::bar PHP Wiki - Listenarchive