88 Stimmen

PHP: Zeit und Performance messen

Tutorial von Stefan Trost

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

Eine einfache Funktion zum Zeitmessen

Um die Performance einer Funktion oder eines Skripts zu bestimmen, benötigen wir die Möglichkeit einer Zeitmessung. Dazu können wir einfach das folgende kurze Skript verwenden:

$tstart = microtime(true);

...

$tdauer = microtime(true) - $tstart;

echo number_format((($tdauer) * 1000), 2),' ms';

In der ersten Zeile wird die aktuelle Zeit mit der Funktion microtime( ) in die Variable $tstart geschrieben. In der fünften Zeile fragen wir abermals die aktuelle Zeit mit microtime() ab und ziehen vom Ergebnis den Wert aus $tstart ab. Was wir damit erhalten, ist die Zeitdifferenz zwischen Zeile 1 und Zeile 5 - wir messen also, wie viel Zeit zwischen Zeile 1 und Zeile 5 vergangen ist. Anschließend verwenden wir die Funktion number_format, mit der wir eine Ausgabe der Form "12,34 ms" erzeugen, um das Ergebnis unserer Zeitmessung auszugeben. Da uns microtime() die Zeit in Millisekunden liefert, nehmen wir den Wert von $tdauer mal 1000 und sorgen mit 2 für zwei Nachkommastellen.

Zwischen Zeile 1 und Zeile 5 können wir nun jedes Skript oder jede Funktion aufrufen, deren Zeit wir messen möchten.

Zeit für den Seitenaufbau messen

Vielleicht interessiert es Sie zum Beispiel, 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>
...
</head>
<body>
...
<?php
   $tdauer = (microtime(true) - $tstart) * 1000;

   echo 'Das Erstellen der Seite dauerte ',number_format($tdauer, 2),' ms';
?>
</body>
</html>

Wir verwenden wieder die Funktion aus dem ersten Beispiel. Den Start der Zeitmessung legen wir ganz an den Anfang, noch vor die Ausgabe unserer HTML Seite. Noch vor dem <html>-Tag speichern wir in $tstart die aktuellen Zeit. In der ausgegeben Seite wird trotzdem <html> ganz oben am Angang stehen, da wir in unserem ersten PHP-Schnipsel keine Ausgabe erzeugen und das abschließende "?>" unseres Skripts ohne ein Zeichen dazwischen an das <html> setzen.

Anschließend kommt Ihre komplette Internetseite mit dem Head, mit dem Body, allen anderen PHP-Funktionen und MySQL-Abfragen. Erst zum Schluss, kurz vor dem schließenden </body> und </html> kommen wir wieder auf unsere gespeicherte Zeit vom Anfang 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, sie in eine Box schreiben oder zentrieren, damit sie besser zum Rest der Seite passt.

Skripte vergleichen

Wenn Sie Skripte oder Funktionen auf Ihrer Website 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.

// benchmark "echo"
$echo_start = microtime(true);
for ($i = 0; $i < 100000; $i++) echo 'das ist ein test';
$echo_ende = microtime(true);

// benchmark "print"
$print_start = microtime(true);
for ($i = 0; $i < 100000; $i++) print 'das ist ein test';
$print_ende = microtime(true);

// zeiten ausgeben
echo 'echo benötigte ',number_format((($echo_ende - $echo_start) * 1000), 2),' ms';
echo 'print benötigte ',number_format((($print_ende - $print_start) * 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 (wie zum Beispiel innerhalb des Strings verwendeten Variablen). 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, die auf dem Rechner oder Server laufen, 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 herausmitteln.

Im ersten Teil geben wir einen Satz 100.000 Mal mit echo aus und speichern vorher und nachher die Zeit ab. Dasselbe machen wir anschließend mit print. Zuletzt geben wir die Ergebnisse für beide Messungen aus.

Sie können in dem Beispiel 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. Tauschen Sie einfach die Zeilen, in denen echo und print getestet werden mit Aufrufen der Funktion, die Sie testen möchten.

AntwortenPositivNegativ

Über den Autor

AvatarSoftware von Stefan Trost finden Sie auf sttmedia.de. Benötigen Sie eine individuelle Software nach Ihren eigenen Wünschen? Schreiben Sie uns: sttmedia.de/kontakt
Profil anzeigen

 

Ähnliche Themen

Themenarten auf askingbox.de

Artikel | 0 Kommentare

Wichtiger Hinweis

Bitte beachten Sie: Die Beiträge auf askingbox.de sind Beiträge von Nutzern und sollen keine professionelle Beratung ersetzen. Sie werden nicht von Unabhängigen geprüft und spiegeln nicht zwingend die Meinung von askingbox.de wieder. Mehr erfahren.

Jetzt mitmachen

Stellen Sie Ihre eigene Frage oder schreiben Sie Ihren eigenen Artikel auf askingbox.de. So gehts.