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.

1. Anwendung des Benchmarkers

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.

2. Generieren eines Reports

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:

Benchmark Report Prozess Baum
Um einen aktuellen Report anzeigen zu lassen, bitte hier klicken.

3. Performance-Tweek

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.