Cómo calcular el tiempo de ejecución de un script PHP

Hay infinidad de situaciones en las que es necesario conocer el tiempo de ejecución de un script PHP, generalmente de cara a su optimización. En páginas complejas, que contengan consultas a bases de datos y AJAX, por ejemplo, se hace necesario identificar los cuellos de botella que hacen que la carga se ralentice. Para ello, PHP pone a nuestra disposición la función microtime().

Esta función de PHP devuelve una cadena de texto (string) con dos valores separados por un espacio, por ejemplo «mseg seg», donde tanto mseg como seg son números. Y mientras que seg indica los segundos totales que han transcurrido desde la época UNIX (1 de Enero de 1970 a las 00:00:00) o timestamp, y mseg nos indica los microsegundos que han transcurrido desde el último segundo.

Para verlo más claro, vamos a hacer unas pruebas desde la línea de comandos, ejecutando PHP interactivamente mediante la siguiente orden:

php -a

Y ahora ejecutemos un par o tres veces seguidas la llamada para ver qué nos devuelve y obtendremos, por ejemplo:

php> echo microtime();
0.52058200 1424454117
php> echo microtime();
0.28707000 1424454118
php> echo microtime();
0.04709300 1424454119

Como vemos, sumando los segundos con los microsegundos tendremos el número de segundos con decimales. Entonces, para obtener el tiempo de ejecución de un script, solamente tendremos que hacer lo siguiente:

  • Obtener los segundos (con decimales) iniciales
  • Dejar trabajar el script que deseamos temporizar
  • Obtener los segundos (con decimales) finales
  • Restar los segundos finales y los iniciales, con lo que obtendremos el tiempo de ejecución.

Es sencillo, pero llamar a microtime() y sumar los microsegundos y los segundos es un poco tedioso, así que haremos una función que lo haga por nosotros.

function microtimeFloat() {
    list($usec, $sec) = explode(" ", microtime());
    return ((float)$usec + (float)$sec);
}

Ahora el proceso queda más simplificado (o refactorizado):

  • $tiempoInicial = microtimeFloat();
  • Dejar trabajar el script que deseamos temporizar
  • $tiempoFinal = microtimeFloat();
  • $tiempoEjecucion = $tiempoFinal – $tiempoInicial;

Y tendremos nuestro deseado tiempo de ejecución en la variable $tiempoEjecucion. Si además queremos limitar el número de decimales, podemos utilizar la función round(float, numero_decimales) para ello:

php > $tiempo = microtime(true);
php > echo round($tiempo, 2);
1424463241.11

Más fácil todavía con PHP5

Sí amigos, en caso de estar utilizando PHP5 lo tenemos aún más fácil, porque entonces la función phptime() admite un parámetro booleano que, si es true, nos devuelve directamente los segundos con decimales, ahorrándonos tener que utilizar la función que vimos anteriormente. Veámoslo en la consola interactiva:

php > echo microtime(true);
1424462663.5879

Después de lo visto aquí, ya no habrá optimización de código que se nos escape.

Dejar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

A %d blogueros les gusta esto: