PHP Performance messen

 

0 Kommentare | Kommentar schreiben | Bewerten | Artikel melden

 

Typ

Tutorial für Fortgeschrittene

Kategorie

Webdesign & Webentwicklung

Sprache

Deutsch

Autor

Stefan Trost Media

Eintrag

13.09.2011

Bewertungen

41

Views

3445
 
 


Über den Autor

Stefan Trost ist Entwickler von Software und Weblösungen und kümmert sich auch gerne um Ihre Anliegen. Kontakt

Profil von Stefan Trost Media
Artikel von Stefan Trost Media

Fragen Sie sich, wie lang die Erstellung einer Ihrer Seiten mit PHP dauert oder möchten Sie verschiedene Skripts vergleichen und testen, welche Funktion am effizientesten arbeitet? In diesem kurzen Tutorial wollen wir dieser Frage nachgehen und Ihnen zeigen, wie Sie selber PHP Performance Vergleiche anstellen können.

Eine einfache Funktion zum Zeitmessen

Um die Performance einer Funktion oder eines Skripts auszutesten, benötigen wir die Möglichkeit einer Zeitmessung. Verwenden Sie dazu einfach das folgende kurze Skript.

01 $tstart = microtime(true);

02

03 ...

04

05 echo number_format(((microtime(true)-$tstart)*1000),2),' ms';

In Zeile 01 wird die aktuelle Zeit mit der Funktion microtime( ) in die Variable $tstart geschrieben. In Zeile 05 fragen wir wieder die aktuelle Zeit ab und ziehen den Wert aus $tstart ab. Was bleibt ist die Zeitdifferenz zwischen Zeile 01 und Zeile 05. Wir messen also, wie viel Zeit zwischen Zeile 01 und Zeile 05 vergangen ist. In Zeile 05 benutzen wir außerdem die Funktion number_format, mit der wir eine Ausgabe der Form "12,34 ms" erzeugen, um das Ergebnis unserer Zeitmessung auszugeben.

Zwischen Zeile 01 und Zeile 05 können wir nun jedes Skript oder jede Funktion schreiben, deren Zeit wir messen möchten.

Zeit für den gesamten Seitenaufbau messen

Vielleicht interessiert es Sie, wie lange es dauert eine gesamte Seite auszugeben, in der vielleicht mehrere PHP Funktionen und MySQL Abfragen vorkommen. Dies wollen wir uns in diesem Beispiel ansehen.

<?php
$tstart = microtime(true);
?><html>
<head>
<meta ...
...
<?php
echo 'Das Erstellen der Seite dauerte ';
echo number_format(((microtime(true)-$tstart)*1000),2),' ms';
?>

</body></html>

Wir verwenden wieder die Funktion aus dem ersten Beispiel. Den Start der Zeitmessung legen wir ganz an den Anfang unserer HTML Seite. Noch vor dem <html>-Tag belegen wir $tstart mit der aktuellen Zeit. In der ausgegeben Seite wird trotzdem <html> ganz oben am Angang stehen, da wir in unserem ersten PHP Schnipsel keine Ausgabe erzeugen.

Anschließend kommt Ihre komplette Internetseite mit den Meta-Tags, allen anderen PHP Funktionen und MySQL Abfragen. Erst zum Schluss, kurz vor dem schließenden </body> und </html> kommen wir wieder auf die Anfangszeit zurück und verwenden unsere Funktion um die vergangene Zeit seit der Seitenerstellung auszugeben. Natürlich können Sie die Zeit noch etwas anders Formatieren, Ihr eine DIV-Box zuweisen oder sie zentrieren, damit sie besser zum Rest der Seite passt.

Skripte vergleichen

Wenn Sie Skripte oder Funktionen auf Ihrer Homepage verwenden, sollten Sie sich Gedanken darüber machen, welche Funktion am Besten geeignet ist und am schnellsten und effizientesten arbeitet. Denn umso schneller eine Funktion ist, umso öfter kann Sie in derselben Zeit ausgeführt werden und umso mehr Seitenaufrufe kann Ihr Server bearbeiten.

01 //echo benchmark

02 $techo = microtime(true);

03 for ($i = 0; $i<100000; $i++) echo 'das ist ein test';

04 $techoende = microtime(true);

05

06 //print benchmark

07 $tprint = microtime(true);

08 for ($i = 0; $i<100000; $i++) print 'das ist ein test';

09 $tprintende = microtime(true=;

10

11 //zeiten ausgeben

12 echo 'echo benötigte ';

13 echo number_format((($techoende-$techo)*1000),2),' ms';

14 echo 'print benötigte ';

15 echo number_format((($tprintende-$tprint)*1000),2),' ms';

 

Im Beispiel wollen wir die echo mit der print Funktion vergleichen. Welche von diesen beiden Funktionen die schnellere und effizientere ist, ist eine oftmals diskutierte Frage auf diversen Internetseiten und hängt auch von mehreren Faktoren ab. Hier möchten wir aber einfach nur eine Ausgabe mit print und eine mit echo vergleichen und die verwendete Zeit dafür messen.

Es reicht allerdings nicht aus, nur einmal jede der Funktionen aufzurufen. Der Zufallseinfluss, zum Beispiel durch weitere Prozesse im Rechner, wäre so groß, dass wir zu keinem vernünftigen Ergebnis kommen würden. Aus diesem Grund führen wir die beiden Vergleiche gleich 100.000 Mal durch. Auch hier bekommen wir bei mehrmaligem Aufruf verschiedene Ergebnisse, aber hier sollten sich Zufallseinflüsse schon besser herausmitteln.

In den Zeilen 01 bis 04 geben wir einen Satz 100.000 Mal mit echo aus und speichern vorher und nacher die Zeit ab. Dasselbe machen wir in den Zeilen 06 bis 09 mit print. Anschließend geben wir in den Zeilen 11 bis 15 die Ergebnisse für beide Messungen aus.

Sie können die länge der Sätze variieren, Variablen mit ausgeben oder anders mit der Funktion herumexperimentieren. Außerdem lässt sich die Funktion selbstverständlich auch dazu verwenden, jede andere Funktion oder jedes andere Skript auszutesten. Schreiben Sie einfach in die das, was Sie testen möchten in die Zeilen 03 und 08.

 
  
 

Kommentare

Sind Sie der selben Meinung wie der Autor oder wollen Sie etwas ergänzen? Hier können Sie einen Kommentar hinterlassen.

Kommentar schreiben

Sie können zu diesem Artikel einen anonymen Kommentar hinterlassen. Möchten Sie unter Ihrem Namen schreiben, loggen Sie sich ein oder registrieren Sie sich.



Bisherige Kommentare

Zu diesem Artikel wurden bislang noch keine Kommentare abgegeben.