W3docs

microtime()

La función microtime() de PHP devuelve el tiempo actual con precisión de microsegundos, ideal para medir el rendimiento del código.

Introducción

En el desarrollo web, el tiempo lo es todo. La función PHP microtime() es una herramienta poderosa que los desarrolladores utilizan para medir el rendimiento de su código. Esta función devuelve el tiempo actual en segundos desde la época Unix con precisión de microsegundos, lo que la convierte en una forma fiable de medir el tiempo transcurrido entre dos puntos del código. En este artículo, profundizaremos en los detalles de esta función y te mostraremos cómo usarla para mejorar el rendimiento de tus aplicaciones web.

¿Qué es microtime()?

La función microtime() devuelve el tiempo actual en segundos desde la época Unix (1 de enero de 1970, 00:00:00 UTC) con precisión de microsegundos. La función estándar time() solo proporciona segundos enteros, por lo que cuando necesitas medir algo que termina en una fracción de segundo —como una consulta a la base de datos o un bucle— microtime() es la opción adecuada.

Por defecto, microtime() devuelve un string con el formato "msec sec" — una parte fraccionaria (los microsegundos como decimal) seguida de un espacio y el timestamp Unix en segundos enteros:

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

Leer ese string es incómodo, por lo que en la práctica casi siempre se pasa true para obtener un número de punto flotante con el que se puede operar directamente:

echo microtime(true);
// Output: 1698765432.456789

Sintaxis

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

Disponible desde PHP 4.0.0. La función acepta un parámetro boolean opcional:

  • $get_as_float — cuando es true, devuelve un float con la forma seconds.microseconds. Cuando es false (el valor predeterminado), devuelve el string "msec sec" descrito anteriormente.

Si alguna vez necesitas el timestamp a partir del string predeterminado, divídelo por el espacio y suma las dos partes:

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

Uso

La función principal de microtime() es el benchmarking: registra microtime(true) antes de un bloque de código, vuelve a registrarlo después y resta. La diferencia es el tiempo de reloj transcurrido en segundos. Esto te permite comparar dos enfoques, encontrar puntos lentos y verificar que una optimización realmente funcionó.

Un segundo uso común es construir identificadores basados en timestamp. El valor float cambia en cada llamada, por lo que puedes incorporarlo a un ID. Sin embargo, ten en cuenta que dos llamadas en el mismo microsegundo devuelven el mismo valor, y los floats solo tienen ~15 dígitos significativos — por lo que microtime() solo no es a prueba de colisiones. Para IDs únicos reales, usa la función dedicada uniqid() (que ya incorpora microtime), opcionalmente con uniqid('', true) para mayor entropía.

microtime() vs hrtime()

microtime() informa el reloj del sistema, que puede retroceder (ajustes NTP, cambios de horario de verano) y producir una medición negativa o sesgada. Para mediciones de duración puras en PHP 7.3+, prefiere hrtime(): usa un temporizador monotónico de alta resolución que nunca retrocede y devuelve nanosegundos. Usa microtime() cuando necesites un punto real en el tiempo vinculado a la época Unix; usa hrtime() cuando solo te importe cuánto tiempo tardó algo.

Ejemplos

Medir el tiempo de ejecución de un script

El patrón clásico: captura el inicio, ejecuta tu código, captura el final, resta.

php— editable, runs on the server

Este ejemplo mide el tiempo que tarda un bloque de código en ejecutarse y muestra el resultado en segundos.

Benchmarking de trabajo real

Para obtener un número que puedas leer y comparar, ejecuta la operación muchas veces y formatea el resultado. Aquí medimos 100,000 concatenaciones de strings e imprimimos el tiempo transcurrido en milisegundos:

<?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() redondea el float a dos decimales para que la salida sea ordenada. Consulta number_format() para ver todas las opciones de formato.

Un identificador basado en timestamp

Puedes derivar un ID del float, pero hashearlo (o usarlo como semilla) en lugar de exponer el valor sin procesar:

php— editable, runs on the server

Añadir random_int() elimina el riesgo de que dos IDs colisionen cuando se generan en el mismo microsegundo. Para la mayoría de las aplicaciones, la función integrada uniqid() es la opción más sencilla y específica para este fin.

Conclusión

La función microtime() es una herramienta esencial para medir el tiempo transcurrido en PHP. Captúrala antes y después de un bloque de código, resta y obtendrás una duración precisa. Recuerda que rastrea el reloj del sistema — para mediciones de duración puras en PHP 7.3+, usa hrtime(), y para timestamps en segundos enteros usa time().

Práctica

Práctica
¿Cuál es la función de microtime() en PHP?
¿Cuál es la función de microtime() en PHP?
Was this page helpful?