W3docs

microtime()

Die PHP-Funktion microtime() misst die Ausführungszeit von Code mit Mikrosekunden-Genauigkeit. Lernen Sie Syntax, Parameter und Beispiele.

Einführung

Beim Webentwickeln ist Timing alles. Die PHP-Funktion microtime() ist ein leistungsstarkes Werkzeug, das Entwickler nutzen, um die Performance ihres Codes zu messen. Diese Funktion gibt die aktuelle Zeit in Sekunden seit dem Unix-Epoch mit Mikrosekunden-Genauigkeit zurück, was sie zu einer zuverlässigen Methode macht, die abgelaufene Zeit zwischen zwei Punkten im Code zu messen. In diesem Artikel gehen wir tiefer auf die Feinheiten dieser Funktion ein und zeigen, wie Sie sie einsetzen können, um die Performance Ihrer Webanwendungen zu verbessern.

Was ist microtime()?

Die Funktion microtime() gibt die aktuelle Zeit in Sekunden seit dem Unix-Epoch (1. Januar 1970, 00:00:00 UTC) mit Mikrosekunden-Genauigkeit zurück. Die Standard-Funktion time() liefert nur ganze Sekunden – wenn Sie also etwas messen möchten, das in einem Bruchteil einer Sekunde endet – wie eine Datenbankabfrage oder eine Schleife – greifen Sie zu microtime().

Standardmäßig gibt microtime() einen string im Format "msec sec" zurück – einen Bruchteil (die Mikrosekunden als Dezimalzahl), gefolgt von einem Leerzeichen und dem ganzzahligen Unix-Zeitstempel:

echo microtime();
// Output: "0.45678900 1698765432"
//          ^ fraction   ^ whole seconds

Das Lesen dieses Strings ist umständlich, weshalb Sie in der Praxis fast immer true übergeben, um eine einzelne Gleitkommazahl zu erhalten, mit der Sie direkt arithmetische Operationen durchführen können:

echo microtime(true);
// Output: 1698765432.456789

Syntax

microtime(bool $get_as_float = false): string|float

Verfügbar seit PHP 4.0.0. Die Funktion akzeptiert einen optionalen boolean-Parameter:

  • $get_as_float — wenn true, wird ein float der Form seconds.microseconds zurückgegeben. Bei false (Standard) wird der oben beschriebene "msec sec"-String zurückgegeben.

Wenn Sie den Zeitstempel aus der Standard-String-Form benötigen, teilen Sie ihn am Leerzeichen auf und addieren Sie die beiden Teile:

[$micro, $sec] = explode(' ', microtime());
$timestamp = (float) $sec + (float) $micro; // same as microtime(true)

Verwendung

Die Hauptaufgabe von microtime() ist das Benchmarking: Erfassen Sie microtime(true) vor einem Codeblock, erfassen Sie es danach erneut und subtrahieren Sie. Die Differenz ist die vergangene Echtzeit in Sekunden. So können Sie zwei Ansätze vergleichen, langsame Stellen finden und überprüfen, ob eine Optimierung tatsächlich geholfen hat.

Eine zweite häufige Verwendung ist die Erstellung zeitstempelbasierter Bezeichner. Der Float-Wert ändert sich bei jedem Aufruf, sodass Sie ihn in eine ID einmischen können. Beachten Sie jedoch, dass zwei Aufrufe in derselben Mikrosekunde denselben Wert zurückgeben und Floats nur ~15 signifikante Stellen speichern – daher ist microtime() allein nicht kollisionssicher. Für echte eindeutige IDs verwenden Sie die dedizierte Funktion uniqid() (die bereits microtime einbezieht), optional mit uniqid('', true) für zusätzliche Entropie.

microtime() vs hrtime()

microtime() meldet die Systemuhr, die rückwärts springen kann (NTP-Anpassungen, Sommerzeitumstellungen) und eine negative oder verzerrte Messung erzeugen kann. Für reine Zeitmessungen in PHP 7.3+ bevorzugen Sie hrtime(): Es verwendet einen monotonen hochauflösenden Timer, der sich niemals rückwärts bewegt und Nanosekunden zurückgibt. Verwenden Sie microtime(), wenn Sie einen tatsächlichen Zeitpunkt benötigen, der mit dem Unix-Epoch verknüpft ist; verwenden Sie hrtime(), wenn Sie nur wissen möchten, wie lange etwas gedauert hat.

Beispiele

Skript-Ausführungszeit messen

Das klassische Muster: Startzeit erfassen, Code ausführen, Endzeit erfassen, subtrahieren.

php— editable, runs on the server

Dieses Beispiel misst die Zeit, die ein Codeblock benötigt, und gibt das Ergebnis in Sekunden aus.

Echte Arbeit benchmarken

Um eine Zahl zu erhalten, die Sie tatsächlich lesen und vergleichen können, führen Sie die Operation viele Male aus und formatieren Sie das Ergebnis. Hier messen wir 100.000 String-Konkatenationen und geben die abgelaufene Zeit in Millisekunden aus:

<?php

$start = microtime(true);

$result = '';
for ($i = 0; $i < 100000; $i++) {
    $result .= 'x';
}

$elapsed_ms = (microtime(true) - $start) * 1000;

echo "Built a " . strlen($result) . "-char string in "
     . number_format($elapsed_ms, 2) . " ms";
// Example output: Built a 100000-char string in 4.31 ms

number_format() rundet den Float auf zwei Dezimalstellen, damit die Ausgabe übersichtlich bleibt. Siehe number_format() für die vollständigen Formatierungsoptionen.

Ein zeitstempelbasierter Bezeichner

Sie können eine ID aus dem Float ableiten, aber hashen Sie ihn (oder verwenden Sie ihn als Seed), anstatt den Rohwert preiszugeben:

php— editable, runs on the server

Das Einmischen von random_int() beseitigt das Risiko, dass zwei IDs kollidieren, wenn sie in derselben Mikrosekunde generiert werden. Für die meisten Anwendungen ist die eingebaute Funktion uniqid() die einfachere, zweckgebundene Wahl.

Fazit

Die Funktion microtime() ist ein unverzichtbares Werkzeug zur Messung abgelaufener Zeit in PHP. Erfassen Sie sie vor und nach einem Codeblock, subtrahieren Sie, und Sie haben eine präzise Dauer. Denken Sie daran, dass sie die Systemuhr verfolgt – für reine Zeitmessungen unter PHP 7.3+ greifen Sie zu hrtime(), und für ganzzahlige Sekunden-Zeitstempel verwenden Sie time().

Übungen

Übung
Was ist die Funktion von microtime() in PHP?
Was ist die Funktion von microtime() in PHP?
Was this page helpful?