PHP Performance bei includes

Lukas [php, Tricks und Tools]

Um die Ausführungszeit zu optimieren haben wir uns eine kleine Testumgebung gebaut, in der man Methoden implementieren und die Anzahl der Ausführungen angeben kann. Die verschiedenen Zeiten werden gemessen und nachher dargestellt. So sieht man, wo man viel Zeit verliert und wie man mit kleinen Verbesserungen Zeit sparen kann.

Das ganze geht los mit includes. Bei relativen Pfaden sucht sich PHP immer durch den kompletten include_path durch. Diese Variable sieht meistens in etwa so aus:

.:/usr/share/php5:/usr/share/php:/var/www/includes/fadal/trunk

Jedes angegebene Verzeichnis wird nun also bei einer relativen Angabe durchsucht. Das kann bei Frameworks, die viele Klassen einbinden, einige Zeit dauert, da bei jedem include/require Vorgang das Prozedere ganz durchlaufen wird.

Vergleichen wir 500 include/require Aufrufe mit den 3 Aufruf-Varianten:

require dirname(__FILE__)."/../includes/requireTest.php";

Diese Variante dauert rund 0.01312 Sekunden

require "includes/requireTest.php";

0.01306 Sekunden

Bei unseren Applikationen definieren wir immer 2 Konstanten. Eine DOCUMENTROOT mit dem Applikationsverzeichnis und eine FWPATH mit dem Pfad zum Framework. Diese verwenden wir nun bei jedem include/require. Warum sieht man an der nächsten Zeitangabe:

require DOCUMENTROOT."/includes/requireTest.php";

0.01235 Sekunden.

Nun was sind schon 0.001 Sekunden? Bei 1000 Seitenaufrufen pro Tag ist das eine Sekunde. Aber irgendwo muss man ja mit dem Optimieren anfangen!

zurück