Generierung aus einer oder mehreren Seiten?
Alexander Rehbein
- webserver
Hallo,
ich habe folgende Frage: Gibt es einen performaten Unterschied (auf einer gewöhnlichen LAMP-Maschine), ob ich:
1. alle Unterseiten aus einer Seite (index.php) mit Hilfe von includes generiere
oder
2. oder sie einzeln aufrufe (seite1.php, seite2.php, etc.)
Natürlich bleibt der Inhalt der gleiche, nur eben die Zugriffe beschränken sich nicht nur auf diese eine Seite, sondern auf mehrere.
Erzeugt das mehr Apache-Prozesse oder wie genau definiert man einen Web-Server-Prozess?
Vielen Dank schonmal und Grüße
Alex
Halihallo Alexander
ich habe folgende Frage: Gibt es einen performaten Unterschied (auf einer gewöhnlichen LAMP-Maschine), ob ich:
- alle Unterseiten aus einer Seite (index.php) mit Hilfe von includes generiere
- oder sie einzeln aufrufe (seite1.php, seite2.php, etc.)
Der Performanceunterschied wäre zwar messbar, aber sehr klein. Der include ist
verhältnissmässig schnell im Vergleich mit den Verarbeitungen in dem inkludierten Script.
Natürlich bleibt der Inhalt der gleiche, nur eben die Zugriffe beschränken sich nicht nur auf diese eine Seite, sondern auf mehrere.
Das spielt keine Rolle. Dem Apachen ist es egal, ob der Request nun auf index.php oder
seite1.php lautet. Ob nun per include oder per Start über Apache auf seite1.php
zugegriffen wird ist nicht wichtig.
Erzeugt das mehr Apache-Prozesse oder wie genau definiert man einen Web-Server-Prozess?
Wenn PHP nicht als Modul geladen ist (bei Perl hiesse dies mod_perl, bei PHP mod_php?)
startet der Apache-Main-Prozess für jeden neuen Request einen neuen Prozess. Bei Modulen
leitet der Apache-Main-Prozess den Request an einen der (der default 50) Apache-Worker-
Processes weiter.
Der Vorteil an einem Modul für PHP oder Perl liegt darin, dass der PHP/Perl-Interpreter
bereits im Worker-Prozess gestartet ist (und nicht bei jedem Request neu geladen werden
muss) und sich gewisse Script-Passagen bereits vorbereitet (optimiert, ggf. schneller
Bytecode) im Speicher befinden.
Achtung: Mit diesen Apache-Internals kenne ich mich nicht so gut aus. Könnte gut sein,
dass die eine oder andere Aussage falsch ist.
Viele Grüsse
Philipp
Halihallo Forumer
Ich versuche noch eine andere argumentative Basis zu geben:
ein require/include in PHP führt etwa folgendes aus:
1) laden des inkludierten PHP-Script
2) "kompilieren"/analysieren des PHP-Scripts
3) ausführen des Codes
Nun aber:
a) include/require (wie bei Perl) geschieht zur Laufzeit des Scriptes. Der inkludierte
Code muss zuerst geparsed, dann kompiliert und nachfolgend ausgeführt werden. Da das
Kompilat in den "Namespace" des aktuellen PHP-Codes eingefügt werden muss, könnte ich
mir schon vorstellen, dass es noch etwas mehr Zeit braucht, als wenn der Code bereits
zur Compile-Time verarbeitet wird.
b) als Modul für Apache bin ich mir nicht sicher, ob auch inkludierte Codebestandteile
als Bytecode zugänglich gemacht werden, da dieser Code bei der Compile-Time noch gar
nicht bekannt war.
Sinngemäss gilt das evtl. auch für Perl.
Viele Grüsse
Philipp