Performance einzelner Code-Blöcke ermitteln

Wenn eine große PHP-Anwendung vorliegt und man messen möchte, welche Abschnitte des Scriptes die meiste Zeit in Anspruch nehmen, kann man dies durch einen PHP Profiler recht komfortabel ermitteln. Oft schachteln Programmierer mehrere Schleifen ineinander, weil sie denken, dass das für diese Aufgabe der beste Weg sei. Solchen Gefährten muss ab und zu mal aufgezeigt werden, wieviel Performance dadurch wirklich verlorengeht. Außerdem ist ein Profiler ein tolles Werkzeug, um zu ermitteln, ob eine kleine Änderung, die sie im PHP Performance Blog gelesen haben, wirklich so eine große Auswirkung hat 🙂

Voraussetzung ist nur die Profiler-Klasse und folgender Quellcode.

require("lib/class_Profiler.php");
$timer = new Profiler;
 
// Starten des Profiling
$timer->start();
 
// Hier sind Ihre Funktionen
...
 
// Stop des Profiling
$timer->stop();
// Darstellen der Informationen
$timer->showtime();

So könnte man die Gesamtausführungszeit des Scriptes ermitteln.
Um aber einzelne Codeabschnitte zu vergleichen bzw die Abschnitte zu finden, die am meisten Zeit verschlingen, kann man zusätzlich noch Messpunkte setzen, um die Zeit an diesem Punkt aufzunehmen.

require("lib/class_Profiler.php");
$timer = new Profiler;
$timer->start();
 
$array = array();
for($i = 0; $i < 1000; $i++) {
        $array[] = $i;
}
 
// Neue Messmarke
$timer->addMarker("Ende des Array-Fuellens");
 
$comma_separated = implode(",", $array);
 
// Neue Messmarke
$timer->addMarker("Aufsplitten des Arrays in einen string");
 
// Stop des Profiling
$timer->stop();
// Darstellen der Informationen
$timer->debug();
 
// Ausgabe der Gesamtzeit der Skriptausführung
echo "<p>";
echo("<b>" . basename($_SERVER['PHP_SELF']) ."</b> hat insgesamt ");
$timer->showtime();
echo(" Sekunden zur Ausführung gebraucht.");
echo "</p>";

Damit wird für jeden Messpunkt die Dauer angezeigt und man kann komfortabel feststellen, an welcher Stelle das Script schlecht arbeitet. Das Ergebnis sieht dann ungefähr sop aus:

Messpunkt Zeit (Timestamp) Unterschied
Start 1176833501.20063000
Ende des Array-Fuellens 1176833501.20533600 0.004706 Sek.
Aufsplitten des Arrays in einen string 1176833501.20951500 0.004179 Sek.
Stop 1176833501.20953500 0.000020 Sek.

class_Profiler_example.php hat insgesamt 0.008905 Sekunden zur Ausführung gebraucht.

Für die Analyse eines unperformanten Scripts ein sehr wichtiges Tool.

Jan hat 152 Beiträge geschrieben

Ein Kommentar zu “Performance einzelner Code-Blöcke ermitteln

Eine Antwort schreiben

Ihre E-Mail-Adresse wird nicht veröffentlicht. Benötigte Felder sind markiert mit *

You may use these HTML tags and attributes: <a href=""> <blockquote cite=""> <pre lang=""> <b> <strong> <i> <em>