Skriptzeitberechnung in Prozent

25. September 2007 – 17:50

Ihr habt sicher schon öfters Seiten gesehen, die im Footer angeben, wie schnell sie die Seite generieren können. Oft auch eine Aufteilung in PHP und SQL. Ich verwende das selbst in manchen Skripten und da mich vor kurzem ein Bekannter mal fragte, wie man das macht, gibt’s hier ne kleine Anleitung.

Zeit ermitteln

Normalerweise schreibe ich Skripte nur für PHP5 da dies sehr viel mehr an Möglichkeiten bietet, dieses mal hab ich auch ein Herz für die PHP4 Anhänger (und Geplagten) ;-).

Unter PHP5 lässt sich die Zeit in Millisekunden schön mit dem Befehl microtime(true) ermitteln, PHP4 kennt das erste Argument nicht und trennt Sekunden und Millisekunden mit einem Leerzeichen. Daher muss man sich mit einer kleinen Funktionen das PHP5 Verhalten nachbauen. Ein Beispiel dazu gibt es im PHP Manual oder hier:

1
2
3
4
5
6
// Mit dieser Funktion erstzen wir microtime(true) für PHP4
function GetTime()
{
    list($sss, $sse) = explode(' ', microtime());
    return (float)$sss + (float)$sse;
}

Ohne Zeilenummern

Als nächstes brauchen wir zwei Werte: Die Gesamtdauer und die SQL-Dauer. Die Gesamtdauer lässt sich einfach berechnen:

1
2
3
4
5
6
7
8
9
10
11
// Start vom Skript
$script_start = GetTime();
 
// Irgendwas
sleep(2);
 
// Skript ist fertig, rechenn wir zusammen
$script_end = GetTime();
$script_time = round($script_end - $script_start, 3); // Runden damit es hübscher ist
 
echo("<p>Benötigte Zeit für alle Aufgaben: {$script_time}</p>");

Ohne Zeilennummern

Die gleiche Prozedur machen wir für jede Abfrage an die Datenbank, nur rechen wir die gleich zusammen:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$sql[] = "OPTIMIZE TABLE 'foo_bar'";
$sql[] = "REMOVE FROM earth WHERE lastname = 'schaeble' AND location = 'Berlin'";
 
// Für jede SQL Query...
foreach ( $sql as $query)
{
    $query_start = GetTime();
 
    // Fragen wir die Datenbank
    $db->Query($query);
 
    $query_end = GetTime();
    $query_time += round($query_end - $query_start, 3); // Rechnen wir das zur Query Time dazu
}
 
echo("<p>Benötigte Zeit für alle Queries: {$query_time}</p>");

Ohne Zeilenummern

Nun können wir ausrechnen, wie lange PHP für seine Aufgaben benötigt hat:
Gesamtzeit - SQL-Zeit = PHP-Zeit

Jetzt fehlen nur noch die Prozentwerte. Wer nicht mehr weis wie man das ausrechnet sollte noch mal in die Schule, ich erklär es hier nicht. :mrgreen:

Vollständiges Beispiel mit Erklärungen

Alle Beispiele sind Public Domain, lernt daraus und verwendet sie wenn ihr wollt :)

Kommentar schreiben