Alexander Rehbein: Generierung aus einer oder mehreren Seiten?

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

  1. Halihallo Alexander

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

    --
    RTFM! - Foren steigern das Aufkommen von Redundanz im Internet, danke für das lesen der Manuals.
    Selbstbedienung! - Das SelfForum ist ein Gratis-Restaurant mit Selbstbedienung, Menüangebot steht in den </faq/> und dem </archiv/>.
  2. 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

    1. und 3) wären auch bei direktem Aufruf nötig, genauso das Starten des PHP-Interpreters.
    2. ist der einzige Mehraufwand, den PHP machen müsste. Dieser Mehraufwand besteht aus
      dem Laden der Datei und dem Einlesen, da dies sehr schnell geschieht, ist der Verlust
      an Performance verhältnismässig (es sei denn, das andere Script besteht lediglich aus
      einem echo-Befehl oder so) klein, das sagte ich bereits.

    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

    --
    RTFM! - Foren steigern das Aufkommen von Redundanz im Internet, danke für das lesen der Manuals.
    Selbstbedienung! - Das SelfForum ist ein Gratis-Restaurant mit Selbstbedienung, Menüangebot steht in den </faq/> und dem </archiv/>.