phpbar.de logo

Mailinglisten-Archive

[php] Re: Idee für PHP Geschwindigkeitssteigerung
Archiv Mailingliste php_(at)_infosoc.uni-koeln.de

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[php] Re: Idee für PHP Geschwindigkeitssteigerung



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!

Home | Main Index | Thread Index

php::bar PHP Wiki   -   Listenarchive