Systemvoraussetzung
- Linux
- Windows
- PHP 3
- PHP 4
- PHP 5
- wahlweise MySQL
Datei(en)
timer.php, timerSQL.php, timerSQL.sql
Problem
Sie kennen sicher das Problem, dass man für eine zu lösende Aufgabe mehrere
Varianten (PHP-Befehle,
MySQL-Abfragen,
allgemeine Routinen) zur Verfügung
hat. Da stellt sich die Frage, wie schnell die einzelnen Lösungen sind. Ziel
sollte es immer sein, Rücksicht auf die Performance zu nehmen und somit
eine schnelle und vor allem reibungslose Darstellung zu gewährleisten.
Lösung
Das folgende Beispiel berechnet die Zeit für die Ausführung einer bestimmten
Aufgabe und gibt den Wert in Sekunden zurück. In unserem Beispiel wurde
dabei eine FOR-Schleife
10 Millionen Mal durchlaufen. Bei den einzelnen Durchläufen
passierte nichts Besonderes, es sollte lediglich eine Arbeit verrichtet
werden.
Wenn Sie das Skript auf Ihrem Server ausführen, tasten Sie sich langsam an
die Menge der Durchläufe heran – nehmen Sie nicht unbedingt 10 Millionen,
sondern fangen erst mit z. B. 1 Million Durchläufen an.
24:
25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54:
| function startTime(){
$timeExplode = explode(" ", microtime()); $time = $timeExplode[1] + $timeExplode[0];
return $time;
}
function endTime($timer){
$timeExplode = explode(" ", microtime()); $time = $timeExplode[1] + $timeExplode[0]; $finish = $time - $timer; $endTime = sprintf("%4.3f", $finish); return $endTime;
}
// Startet den Timer $timer = startTime();
for($x=0;$x<10000000;$x++){
// Hier passiert nichts! }
// Beendet den Timer $endTime = endTime($timer);
echo $endTime . ' Sekunden';
|
Beispiel 2.23: timer.php
Ausgabe
Im nachfolgenden Beispiel wird anhand einer MySQLAbfrage
der Unterschied
der Laufzeiten der PHPBefehle
mysql_fetch_row() und mysql_fetch_
array() ermittelt.
Dabei soll die Frage geklärt werden, wie lange beide Befehle für die Darstellung
von 8420 Datensätzen benötigen. Um einen genaueren Wert zu erhalten, haben
wir das Skript insgesamt 6-mal
durchlaufen lassen.
Sie finden für dieses Beispiel die passende Datenbank zum Testen im Verzeichnis
Datenbanken unter dem Namen timerSQL.sql. Sie können diese Datei direkt
mit phpMyAdmin einlesen.
24:
25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51:
52:
53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81:
| function startTime(){
$timeExplode = explode(" ", microtime()); $time = $timeExplode[1] + $timeExplode[0]; return $time;
}
function endTime($timer){
$timeExplode = explode(" ", microtime()); $time = $timeExplode[1] + $timeExplode[0]; $finish = $time - $timer; $endTime = sprintf("%4.3f", $finish); return $endTime;
}
// Definiert die Parameter für den Datenbank Connect define("DB_HOST","localhost"); // MySQL hostname define("DB_NAME","datenbankname"); //MySQL db-name define("DB_USER","benutzer"); //MySQL User define("DB_PASS","passwort"); // MySQL Passwort
// Datenbank Connect herstellen $db = @MYSQL_CONNECT(DB_HOST,DB_USER,DB_PASS)
or die("Datenbank momentan nicht erreichbar"); $db_check = @MYSQL_SELECT_DB(DB_NAME)
or die("Datenbank momentan nicht erreichbar");
// Holt alle Datensätze - insgesamt 100 $result = @mysql_query("SELECT * FROM statistik_pageviews"); $result1 = @mysql_query("SELECT * FROM statistik_pageviews");
// Startet den Timer $timer = startTime();
while($row = @mysql_fetch_row($result)){ // Hier findet die Ausgabe des Seiteninhalts statt $contentWeb .= $row[0] . ' -- ' . $row[1] . '<br>'; }
// Beendet den Timer $endTime = endTime($timer);
echo $endTime . ' Sekunden für mysql_fetch_row <br>';
// Startet den Timer $timer = startTime();
while($row = mysql_fetch_array($result1)){ $contentWeb .= $row['id'] . ' -- ' . $row['seite'] . '<br>'; }
// Beendet den Timer $endTime = endTime($timer);
echo $endTime . ' Sekunden für mysql_fetch_array <br>';
|
Beispiel 2.24: timerSQL.php
Ausgabe
0.081 Sekunden für mysql_fetch_row
0.111 Sekunden für mysql_fetch_array
0.133 Sekunden für mysql_fetch_row
0.181 Sekunden für mysql_fetch_array
0.138 Sekunden für mysql_fetch_row
0.169 Sekunden für mysql_fetch_array
0.085 Sekunden für mysql_fetch_row
0.118 Sekunden für mysql_fetch_array
0.132 Sekunden für mysql_fetch_row
0.209 Sekunden für mysql_fetch_array
0.097 Sekunden für mysql_fetch_row
0.114 Sekunden für mysql_fetch_array |
Sie können mit diesen beiden Beispielen jeweils die Laufzeit in Sekunden
berechnen. Falls Sie also einmal nicht sicher sein sollten, welcher Befehl der
schnellere ist, binden Sie einfach die beiden Funktionen ein und testen Ihr
Skript.
Dieses Skript aus dem SELFPHP KOCHBUCH wurde von SELFPHP unter dem "Tarif Mc500" von McAc.net-Webhosting erfolgreich ausgeführt und getestet!
Auf der Übersichtseite unter "McAc.net – Webhosting zu diesem Buch" finden Sie weitere Informationen zu dem Webhostingpaket, dass durch SELFPHP getestet wurde.
|