microtime()
La fonction PHP microtime() mesure les performances du code en renvoyant le temps en secondes depuis l'époque Unix avec une précision à la microseconde.
Introduction
En développement web, le temps est primordial. La fonction PHP microtime() est un outil puissant que les développeurs utilisent pour mesurer les performances de leur code. Cette fonction retourne l'heure actuelle en secondes depuis l'époque Unix avec une précision à la microseconde, ce qui en fait un moyen fiable de mesurer le temps écoulé entre deux points dans votre code. Dans cet article, nous allons explorer en détail les subtilités de cette fonction et vous montrer comment l'utiliser pour améliorer les performances de vos applications web.
Qu'est-ce que microtime() ?
La fonction microtime() retourne l'heure actuelle en secondes depuis l'époque Unix (1er janvier 1970, 00:00:00 UTC) avec une précision à la microseconde. La fonction standard time() ne vous donne que des secondes entières, donc lorsque vous avez besoin de mesurer quelque chose qui se termine en une fraction de seconde — comme une requête de base de données ou une boucle — c'est microtime() qu'il faut utiliser.
Par défaut, microtime() retourne une chaîne au format "msec sec" — une partie fractionnaire (les microsecondes sous forme décimale) suivie d'un espace et de l'horodatage Unix en secondes entières :
echo microtime();
// Output: "0.45678900 1698765432"
// ^ fraction ^ whole secondsLa lecture de cette chaîne est peu pratique, aussi en pratique vous passez presque toujours true pour obtenir un nombre à virgule flottante sur lequel vous pouvez effectuer des calculs directement :
echo microtime(true);
// Output: 1698765432.456789Syntaxe
microtime(bool $get_as_float = false): string|floatDisponible depuis PHP 4.0.0. La fonction accepte un paramètre booléen optionnel :
$get_as_float— lorsqu'il vauttrue, retourne unfloatde la formeseconds.microseconds. Lorsqu'il vautfalse(valeur par défaut), retourne la chaîne"msec sec"décrite ci-dessus.
Si vous avez besoin de l'horodatage à partir du format de chaîne par défaut, divisez la chaîne sur l'espace et additionnez les deux parties :
[$micro, $sec] = explode(' ', microtime());
$timestamp = (float) $sec + (float) $micro; // same as microtime(true)Utilisation
Le rôle principal de microtime() est le benchmarking : enregistrez microtime(true) avant un bloc de code, enregistrez-le à nouveau après, et soustrayez. La différence est le temps horloge murale écoulé en secondes. Cela vous permet de comparer deux approches, de trouver les points lents et de vérifier qu'une optimisation a réellement porté ses fruits.
Une deuxième utilisation courante est la construction d'identifiants basés sur l'horodatage. La valeur flottante change à chaque appel, vous pouvez donc l'incorporer dans un identifiant. Notez cependant que deux appels dans la même microseconde retournent la même valeur, et les flottants ne contiennent que ~15 chiffres significatifs — donc microtime() seul n'est pas à l'abri des collisions. Pour de vrais identifiants uniques, utilisez la fonction dédiée uniqid() (qui intègre déjà microtime), éventuellement avec uniqid('', true) pour plus d'entropie.
microtime() vs hrtime()
microtime() rapporte l'horloge système, qui peut reculer (ajustements NTP, changements d'heure d'été) et produire une mesure négative ou faussée. Pour des mesures de durée pure en PHP 7.3+, préférez hrtime() : il utilise un minuteur monotone haute résolution qui ne recule jamais et retourne des nanosecondes. Utilisez microtime() lorsque vous avez besoin d'un point dans le temps réel lié à l'époque Unix ; utilisez hrtime() lorsque vous voulez seulement savoir combien de temps quelque chose a pris.
Exemples
Mesurer le temps d'exécution d'un script
Le modèle classique : capturez le début, exécutez votre code, capturez la fin, soustrayez.
Cet exemple mesure le temps qu'un bloc de code prend à s'exécuter et affiche le résultat en secondes.
Benchmarking d'un traitement réel
Pour obtenir un nombre lisible et comparable, exécutez l'opération plusieurs fois et formatez le résultat. Ici, nous chronométrons 100 000 concaténations de chaînes et affichons le temps écoulé en millisecondes :
<?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 msnumber_format() arrondit le flottant à deux décimales pour que la sortie reste lisible. Consultez number_format() pour toutes les options de formatage.
Un identifiant basé sur l'horodatage
Vous pouvez dériver un identifiant à partir du flottant, mais hachez-le (ou utilisez-le comme graine) plutôt qu'exposer la valeur brute :
Mélanger random_int() élimine le risque que deux identifiants entrent en collision lorsqu'ils sont générés dans la même microseconde. Pour la plupart des applications, la fonction intégrée uniqid() est le choix plus simple et dédié à cet usage.
Conclusion
La fonction microtime() est un outil essentiel pour mesurer le temps écoulé en PHP. Capturez-la avant et après un bloc de code, soustrayez, et vous obtenez une durée précise. Gardez simplement à l'esprit qu'elle suit l'horloge système — pour des mesures de durée pure avec PHP 7.3+, utilisez hrtime(), et pour des horodatages en secondes entières, utilisez time().