Teil von  SELFPHP
Letztes Update: 20.07.2006 17:03:44 


Navigation

Seite News *

Seite Startseite
Seite Über SELFPHP
Seite Werbung
Seite Kontakt
Seite Forum *
Seite Download *
Seite SELFPHP Banner *
Seite SELFPHP in Buchform
Seite Newsletter *
Seite Impressum

 
* Link führt ins Internet


Anbieterverzeichnis
Informieren Sie sich über die Unternehmen in unserem Anbieterverzeichnis!  

 


SELFPHP Forum
Fragen rund um die Themen PHP? In über 79.000 Beiträgen finden Sie sicher die passende Antwort!  


Newsletter
Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 



 

Performance (Zeit) von Befehlen testen




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

16.971 Sekunden

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.




 

 




 sponsored by

Host Europe


HighText iBusiness


Host Europe




© 2001-2006 E-Mail SELFPHP - Damir Enseleit, info@selfphp.deImpressumKontakt