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 secondsLeer 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.456789Sintaxis
microtime(bool $get_as_float = false): string|floatDisponible desde PHP 4.0.0. La función acepta un parámetro boolean opcional:
$get_as_float— cuando estrue, devuelve unfloatcon la formaseconds.microseconds. Cuando esfalse(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.
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 msnumber_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:
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().