Xdebug: Depurar y optimizar código PHP

Hay momentos en los que vemos que la carga de una página tarda demasiado, o que el uso de un recurso, que en principio habíamos creído que era menor, sube y su tiempo de ejecución hace que nuestro servidor sufra. Trazar estos problemas a simple vista o a través de trazas no es más que complicar el código y hacer que varíe su línea de ejecución y, con ello, el rendimiento en sí del mismo, por lo que, nos hace falta una herramienta a alto nivel, que no implique cambiar el código, que nos permita realizar este tipo de comprobaciones sobre el código. Esta es Xdebug.

¿Qué es y qué hace Xdebug?

Xdebug es un módulo de PHP que se carga únicamente cuando se quiere trazar una ejecución de un código PHP (por ello no conviene, en ningún caso, cargarlo en producción, ya que puede cargar de por sí el sistema).

El módulo se encarga de almacenar información de cada llamada a función de PHP, junto con la marca horaria en la que se sucede para tener la traza exacta del curso de la ejecución del programa.

¿Cómo y dónde se obtiene esta información?

Cada traza es soltada dentro de un fichero llamado cachegrind.out. finalizado con el número del proceso en el que se ejecuta el intérprete de PHP.

Este archivo puede ser abierto desde algún programa como KCacheGrind (de KDE para GNU/Linux y Windows), así como WinCacheGrind, xdebugtoolkit y WebGrind. Así se muestra con KCacheGrind:

Como puede verse, los procesos se muestran de forma jerárquica en las llamadas a través de un árbol de llamadas, pudiendo poner la base en cualquier función inicial.

Además, permite ver el listado de las llamadas que han sido más usadas, y las que más demoran su ejecución. Lo cual viene muy bien para poder optimizar, no solo las funciones en sí, sino también la forma en la que se llaman.

Conclusión

Es una gran herramienta que no debería de faltar en todo programador PHP, ya que nos da información muy valiosa sobre la optimización con la que escribimos nuestro código y nos puede señalar faltas en el rendimiento que solo se verían demasiado tarde, en producción.