Benchmark
Gerade bei Webapplikationen ist Performance extrem wichtig. Kein Besucher wartet freiwillig länger
als 10s auf eine Webseite. Um bereits bei der Entwicklung das Thema Performance nicht aus den Augen
zu verlieren stellt das Framework mit dem
BenchmarkTimer eine Benchmark-Komponente
zur Verfügung, mit der alle Ausführungszeiten gemessen und anschließend dargestellt
werden können. Die GUI-Schicht (Page- und Front-Controller) unterstützen das Beurteilen der
Ausführungszeiten mit vielen Messpunkten. Beispielsweise werden die Ausführungszeiten von
Document-Controllern ohne Zutun des Entwicklers aufgenommen und im Report dargestellt.
Die Anwendung des
BenchmarkTimer gestaltet sich sehr einfach. Es ist lediglich folgender
Code vor und nach dem zu messenden Events einzufügen:
PHP-Code
$t = &Singleton::getInstance('BenchmarkTimer');
$t->start('MyEvent');
//
// Zu messender PHP-Code
//
$t->stop('MyEvent');
Zu beachten ist dabei lediglich, dass der
BenchmarkTimer immer singleton
instanziiert werden muss, da sonst Informationen über Teile der Messung verloren gehen können.
Es muss zudem auf den Gültigkeitsbereich von Variablen geachtet werden. Sind Messungen über
die Grenzen von Funktionen und Klassen hinweg notwendig muss sichergestellt sein, dass die Variable,
die die Referenz auf die Instanz des
BenchmarkTimers kein Null-Pointer ist. Hier ist es ratsam
folgenden Code zu verwenden:
PHP-Code
$t = &Singleton::getInstance('BenchmarkTimer');
$t->start('MyEvent');
//
// Zu messender PHP-Code
//
$t = &Singleton::getInstance('BenchmarkTimer');
$t->stop('MyEvent');
Dieser Fall findet jedoch nur in Ausnahmen Anwendung.
Da das Framework im
Postback-Modus arbeitet und es im Allgemeinen nur eine zentrale
Datei (zumeist
index.php) gibt, ist das generieren von Reports durch ein
PHP-Code
$t = &Singleton::getInstance('BenchmarkTimer');
echo $t->createReport();
am Ende der
index.php zu bewerkstelligen. Möchte der Entwickler selbst entscheiden, wann
der Report angezeigt wird um auch im Live-Betrieb ein Gefühl für die Performance der
Applikation behalten zu können kann das durch das Einfügen des Codes
PHP-Code
if(isset($_REQUEST['benchmarkreport']) && $_REQUEST['benchmarkreport'] == 'true'){
$t = &Singleton::getInstance('BenchmarkTimer');
echo $t->createReport();
}
am Ende der
index.php bewerkstelligt werden. Ein Report der aktuell angezeigten Seite hat
folgende Gestalt:
Um einen aktuellen Report anzeigen zu lassen, bitte
hier klicken.
Mit dem Release 1.11 ist es möglich, den Benchmarker zu deaktivieren. Dies kann genutzt werden,
um die Abarbeitungszeit eines Requests zu steigern. Empirische Werte mit Tests an der vorliegenden
Webseite zeigen eine Steigerung um bis zu 25% bei deaktivierten Benchmarker. Da der Benchmarker
in Produktions-Umgebungen keine notwendige Funktion erfüllt, ist das Abschalten des Tools mit
keinen Nachteilen verbunden.
Das Abschalten kann in der Bootstrap-Datei mit folgendem Code erledigt werden:
PHP-Code
$bench = &Singleton::getInstance('BenchmarkTimer');
$bench->disable();
Um eine möglichst effiziente Abschaltung zu erziehlen, sollten die in der Codebox gezeigten
Zeilen direkt nach dem Einbinden des Page-Controllers platziert werden.
Kommentare
Möchten Sie den Artikel eine Anmerkung hinzufügen, oder haben Sie ergänzende Hinweise? Dann können Sie diese
hier einfügen. Die bereits verfassten Anmerkungen und Kommentare finden Sie in der untenstehenden Liste.
Für diesen Artikel liegen aktuell keine Kommentare vor.