Apache Benchmark misst Geschwindigkeit von PHP-Programm

Der Webserver Apache hat ein Benchmark-Programm dabei. Martin Goldmann hat sich für Internet Professionell das Programm angesehen und ein paar Tests mit PHP gefahren.

Der Programmierer an sich denkt gerne an Geschwindigkeit. Gerade wenn es um Web-Anwendungen geht, kommt es manchmal auf Millisekunden an. Denn eine Web-Anwendung läuft gleich mehrfach. Im Besten Fall greifen Hunderte oder Tausende gleichzeitig auf eine Datei zu – da werden aus ein paar Millisekunden schnell bremsende Zehntel und lähmende Sekunden.

Doch wie soll man ausprobieren, wie lange der Server zum Abarbeiten einer Seite braucht. Wie soll man ausprobieren, welches Verfahren nun, verflixt nun mal, das schnellste ist?

Die Programmierer des Apache-Servers haben eine Lösung dieses Problems. Und die heißt “ab”. Dieser Apache-Benchmark ruft einzelne Seiten auf dem eigenen oder einem fremden Webserver mehrfach ab und ermittelt aus den Wartezeiten einen Mittelwert.

Das lädt zum Spielen ein. Probieren Sie doch einmal aus, welche Art die schnellste ist, einen String in ein PHP-Dokument zu bringen, der aus einem fixen Teil und aus dem Inhalt einer Variablen besteht. Denn dafür gibt es mehrere Methoden:

– String und Variable in einen echo-Befehl mit doppelten Anführungszeichen packen und den fixen Teil mit der Variable zu mischen, etwa

 

<?

$teststring = “Erde”;

echo “Hallo $teststring”;

?>

 

Das ist die meiner Ansicht nach bequemste Methode, Strings mit variablen Inhalten zu schreiben. Aber ist das auch die schnellste? Es gibt noch andere Möglichkeiten:

 

<?

$teststring = “Erde”;

echo ‘Hallo ‘.$teststring;

?>

 

Hier haben wir es mit einfachen Anführungszeichen zu tun. Das bedeutet für PHP: Variablen innerhalb der einfachen Anführungszeichen werden nicht interpretiert. Also muss die Variable mit einem Punkt hinten angehängt werden.

Oder wie wäre es mit dieser Variante:

 

<?

$teststring = “Erde”;

?>

Hallo <?=$teststring?>

 

Hier wird “Hallo” allein von HTML ausgegeben, nur für die Ausgabe der Variablen macht sich der PHP-Interpreter an die Arbeit.

Zuletzt hätten wir noch diese Variante:

 

<?

$teststring = “Erde”;

printf(“Hallo %s”, $teststring);

?>

 

Für die formatierte Ausgabe von Strings.

Welche Methode ist also die schnellste? Ausprobieren. Vom Gefühl her würde man printf und echo”” die schlechtesten Prognosen geben.

Damit der Benchmark mit so einer simplen Programmzeile messbare Ergebnisse liefert, packen wir die Ausgabe noch in eine Schleife. Jede Zeile soll 5000mal ausgegeben werden. Das sieht dann im ersten Beispiel so aus:

 

<?

$teststring = “Erde”;

for ($i=0; $i < 5000; $i++)

{

echo “Hallo $teststring”;

}

?>

 

Auch die anderen Testdateien müssen mit der Schleife ausgestattet sein.

Dann kann es losgehen. Das Programm ab finden Sie im Verzeichnis /usr/local/apache2/bin auf ihrem Server. (Das Verzeichnis kann abhängig von Ihrer Installation auch ein anderes sein.) Bei Suse 9.1 geht’s mit dem Aufruf von ab2

Starten Sie ab mit folgenden Parametern:

ab –n 1000 ihrserver/test1.php

Statt “ihrserver” geben Sie die URL Ihres Testservers ein oder tippen einfach “localhost”. Nach einem Tastendruck auf Return geht es los. Das Benchmark ruft 1000mal nacheinander die Testdatei auf und führt sie aus. Danach gibt es eine hübsche Zusammenfassung. Am interessantesten für den schnellen Test ist darin die Angabe der “Time per request:”. Hier steht der Zeitraum in Millisekunden, den ein Aufruf der Datei gebracht hat.

Das Ergebnis meines kleinen Tests: Wie erwartet belegt printf den letzten Platz mit rund 78 Millisekunden pro Abruf auf einem P450 mit Suse Linux und 192 MByte Speicher. Kein Wunder: printf ist zu mächtig und vollkommen fehl am Platze, um einfach nur einen Text und eine Variable zu mixen.

Auf dem dritten Platz liegt echo mit den doppelten Anführungszeichen. Etwas schneller als printf braucht es dennoch satte 71 Millisekunden pro Abruf.

Deutlich schneller ist schon der Echo-Befehl mit einfachen Anführungszeichen. Er schafft die Seite in durchschnittlich 32 Millisekunden.

Die Mischung aus HTML mit der eingebetteten PHP-Variablen erweist sich aber als schnellste Lösung. Nur 25 Millisekunden brauchte der Server für den Abruf des PHP-Dokuments mit seinem 5000fachen “Hallo Erde”. Alle Angaben ohne Gewähr – probieren Sie es einfach mal selbst aus.

Übrigens: Führen Sie solche Benchmarks nur zu Hause oder einem Testserver durch. Ihr Produktiv-Server sollte nicht mit solchen Versuchen belastet werden.

Ähnliche Beiträge