Teil von  SELFPHP
  +++ SELFPHP CronJob-Service :: Jetzt auch als Professional-Version verfügbar! +++



:: Anbieterverzeichnis ::

Globale Branchen

Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP  

 

:: SELFPHP Forum ::

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

 

:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 

:: Qozido ::

Die Bilderverwaltung mit Logbuch für Taucher und Schnorchler.   

 
 
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.



 


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.


 




:: Premium-Partner ::

Webhosting/Serverlösungen


Premium-Partner MECO Systemhaus GmbH & Co. KG
Premium-Partner PSW GROUP GmbH & Co. KG
Premium-Partner BPI-Systeme
Premium-Partner Pixel X
Premium-Partner
 

:: SELFPHP Sponsoren ::


Microsoft Deutschland GmbH
twosteps.net - ...Premium-Webhosting
Sedo - Bei uns wird PHP großgeschrieben
hostfactory.ch - OptimaNet Schweiz AG
ZEND - The PHP Company
Kaspersky Labs
HighText iBusiness
SELFPHP Sponsoren
 

Qozido


© 2001-2009 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt