Navigation
 Startseite
 Fachbücher
 Anzeigenmarkt
 Forum
 Webmaster News
 Script Newsletter
 Kontakt
 Script Installation
 Php
 Php Tutorials
 Webhoster Vergleich
 Impressum

Community-Bereich
 kostenlos Registrieren
 Anmelden
 Benutzerliste

Script Datenbank
 Script Archiv
 Script Top 20
 Screenshots
 Testberichte

Suche
 

Unsere Php Scripts
 Counter Script
 Umfrage Script
 Bilder Upload Script
 Terminverwaltung
 Simple PHP Forum
 RSS Grabber

Script Mods
 phpBB Adsense Mode

Tools und Generatoren
 .htpasswd Generator
 md5 Generator
 base64 Generator
 Markdown to HTML
 Colorpicker
 Unix timestamp Tool
 TLD Liste
 Webkatalog‑Verzeichnis

Partner
 Sprüche Treff

Artfiles.de
Bietet Serviceorientierte...
https://www.Artfiles.de
Hosterplus.de
Bekommen Sie Speicherplatz (Webspace), Domains...
https://www.Hosterplus.de
 
 
 

Scriptlaufzeit messen mit microtime

Sie befinden sich: Home > Php Tutorial > Scriptlaufzeit messen mit...

Scriptlaufzeit messen mit microtime


Eintrag am:  01.09.2010
Hits / Besucher:  8147
Sprache:  Deutsch
Kategorie:  Einsteiger Tutorials
Tutorial Art:  eigenes
Eingetragen von   schubertmedia schubertmedia
 
Beschreibung

Die Funktion microtime(true) gibt den aktuellen Zeitstempel als Fließkommazahl in Sekunden zurück. Durch zwei Aufrufe (vor und nach einem Codeabschnitt) lässt sich die Laufzeit beliebiger PHP-Abschnitte auf die Mikrosekunde genau messen. Das ist der Standardweg für Performance-Messungen in PHP.

Grundprinzip: Start und Ende messen

Das Prinzip ist einfach: Zeitstempel vor dem Code merken, Zeitstempel danach merken, Differenz bilden.

<?php

$start = microtime(true);

/* Hier steht der Code, der gemessen werden soll */
usleep(50000); // 50 Millisekunden Pause als Beispiel

$ende = microtime(true);
$dauer = $ende - $start;

echo 'Laufzeit: ' . round($dauer, 4) . ' Sekunden';
/* Ausgabe: Laufzeit: 0.0501 Sekunden */
?>

Der Parameter true bei microtime(true) sorgt dafür, dass die Zeit als float zurückgegeben wird. Ohne diesen Parameter liefert die Funktion einen String, der erst umständlich zerlegt werden müsste.

Praxisbeispiel: Schleifengeschwindigkeit vergleichen

Ein häufiger Anwendungsfall ist der Vergleich verschiedener Lösungsansätze, um den schnelleren zu finden:

<?php

$daten = range(1, 10000);

/* Variante 1: for-Schleife */
$start = microtime(true);
$summe = 0;
for ($i = 0; $i < count($daten); $i++) {
$summe += $daten[$i];
}
$zeit1 = microtime(true) - $start;

/* Variante 2: array_sum */
$start = microtime(true);
$summe = array_sum($daten);
$zeit2 = microtime(true) - $start;

echo 'for-Schleife: ' . round($zeit1 * 1000, 2) . ' ms';
echo 'array_sum: ' . round($zeit2 * 1000, 2) . ' ms';
?>

Die Multiplikation mit 1000 rechnet Sekunden in Millisekunden um, was bei kurzen Messungen übersichtlicher ist.

Mehrere Abschnitte messen

Bei komplexeren Scripts lohnt es sich, mehrere Messpunkte zu setzen, um den langsamsten Abschnitt zu identifizieren:

<?php

$zeiten = [];

$zeiten['start'] = microtime(true);

/* Abschnitt 1: Daten laden */
$daten = file_get_contents('daten.csv');
$zeiten['daten_geladen'] = microtime(true);

/* Abschnitt 2: Daten verarbeiten */
$zeilen = explode("\n", $daten);
$zeiten['verarbeitet'] = microtime(true);

/* Ergebnis ausgeben */
foreach ($zeiten as $name => $zeit) {
if ($name === 'start') continue;
$diff = round(($zeit - $zeiten['start']) * 1000, 2);
echo $name . ': ' . $diff . ' ms<br>';
}
?>

So wird auf einen Blick sichtbar, welcher Teil des Scripts die meiste Zeit beansprucht.

Hilfsfunktion für wiederholte Messungen

Wer regelmäßig Laufzeiten misst, kann sich eine kleine Hilfsfunktion schreiben:

<?php

function timer(string $label = ''): void
{
static $letzte = null;

$jetzt = microtime(true);

if ($letzte !== null) {
$diff = round(($jetzt - $letzte) * 1000, 2);
echo $label . ': ' . $diff . ' ms<br>';
}

$letzte = $jetzt;
}

timer();
/* ... Code-Abschnitt 1 ... */
timer('Daten geladen');
/* ... Code-Abschnitt 2 ... */
timer('Verarbeitung fertig');
?>

Durch die static-Variable merkt sich die Funktion den Zeitpunkt des letzten Aufrufs und gibt automatisch die Differenz aus.

Tipps für zuverlässige Messungen

Einzelne Durchläufe schwanken je nach Serverlast. Für aussagekräftige Ergebnisse empfiehlt es sich, den zu messenden Code mehrfach in einer Schleife auszuführen und den Durchschnitt zu bilden. Außerdem sollte die Messung ohne aktiviertes Xdebug stattfinden, da der Debugger die Laufzeit deutlich verfälscht.

 

Tags:

 

Bücherregal mit drei Büchern: 'PHP 4 - Grundlagen und Profiwissen' von Hanser Verlag, 'Webdesign in a Nutshell' von O'Reilly Verlag, und 'Webgestaltung' von Galileo Computing.