Daniel: Performanceeinbruch bei verschachtelten includes?

Hallo!

Ich habe eine kurze Frage zu den verschachtelten include() Dateien: Irgendwo habe ich einmal das Argument aufgefasst, das es für PHP performancemässig schlecht ist, mehrere include Dateien ineinander zu verschachteln. Stimmt das, oder war das eher nur eine vage Vermutung ?

mfg,
Daniel

  1. Hallo Daniel!

    [...] PHP performancemässig schlecht ist, mehrere include Dateien [...] Stimmt das, oder war das eher nur eine vage Vermutung ?

    Ich weiss das auch nicht so genau, aber schau mal http://www.google.com/search?q=PHP+include+Performance durch, dort findest bestimmt was, was Dich weiter bringt.

    Oder schau mal im Archiv, dort steht bestimmt auch was zu dem Thema.
    So, und weil ich grad Lust hatte hab ich dir das sogar auch noch abgenommen: http://selfsuche.teamone.de/cgi-bin/such.pl?suchausdruck=PHP+include+Performance&lang=on&feld=alle&index_1=on&index_2=on&index_3=on&index_4=on&index_5=on&hits=200
    Ergebnisse (eins ist nicht aus dieser Suche, sondern bissel aelter):
      * (PHP) Performance: Frames vs. PHP
        http://forum.de.selfhtml.org/archiv/2003/11/63322/#m358908
      * (SERVER) Generierung aus einer oder mehreren Seiten?
        http://forum.de.selfhtml.org/archiv/2003/9/57715/#m323342
      * (PHP) Exzessives Nutzen von include(...) ?
        http://forum.de.selfhtml.org/archiv/2003/5/46773/#m255245
      * (PHP) Include/Require - Seitenkopf laden
        http://forum.de.selfhtml.org/archiv/2003/4/43844/#m239084
      * (PHP) Performance und Include
        http://forum.de.selfhtml.org/archiv/2002/6/13664/#m75830

    So, steht meist aehnliches drin ...

    MfG
    Götz

    --
    Losung und Lehrtext für Samstag, 13. Dezember 2003
    Ich will zu Gott rufen und der Herr wird mir helfen. (Psalm 55,17)
    Jesus spricht: Sollte Gott nicht Recht schaffen seinen Auserwählten, die zu ihm Tag und Nacht rufen, und sollte er's bei ihnen lange hinziehen? (Lukas 18,7)
    (http://www.losungen.de/heute.php3)
    1. Hallo Götz,

      Danke für die ausführliche Antwort!

      Grüsse,
      Daniel

      1. Hello,

        von der Theorie her ist es ganz einfach:

        PHP liest einen Quelltext und scannt diesen im ersten Durchlauf auf alle Bezeichner und Resource-Identifier, die sofort ausgewertet werden sollen. Dann werden diese ausgewertet. Diese liefern wieder Resource-Identifier, die sofort ausgewertet werden sollen etc. Das Ganze ist ein rekursiver Vorgang.

        Jeder Resource-Zugriff dauert z.B. 8ms.

        Dann beginnt im zweiten Durchlauf die Scriptausführung. Dabei stößt PHP weider auf Resource-Identifier, die aber nur bedingt benutzt werden sollen. Diese werden nun genutzt und ausgewertet. Darin enthalten sein könnten wieder solche, die direkt ausgewertet werden sollten und auch bedingte.

        Jeder Resource-Zugriff dauert z.B. 8ms.

        Das ist die Theorie.

        In der Praxis verfügen Serversysteme oft über sehr viel Speicher und ein Directory-Mirroring-System bzw. große Datei-Caches. Das führt zu einer erheblichen Reduzierung der Zugriffszeit und der Lesezeiten, obwohl die reinen Lesezeiten bei >40MB/sec Datendurchsatz schon nicht mehr so sehr ins Gewicht fallen. Welche Ergebnisse das Caching und Mirroring bringen, vermag ich nicht vorherzusagen.

        Man sollte sich allerdings angewöhnen beim Umgang mit Speicherplatz und externen Ressourcen (Deutsch mit 2 s) bei passender Gelegenheit

        unset(Speicherplatz)           bei großen Scripten und großen Variablen
        close(Dateihandle)
        mysql_free_result(Abfrageergebnis)   das bringt enorm viel!
        mysql_close(Connection)        das bringt nicht viel
        ...

        zu benutzen, um dem System ungenutzen Speicher wieder verfügbar zu machen.

        Liebe Grüße aus http://www.braunschweig.de

        Tom

        --
        Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen