Estoy alucinando con la extensión XDebug para PHP. Se trata de una extensión para PHP que incorpora a este funciones de depuración y "profiling", que no sé muy bien cómo traducir.
La instalación de XDebug no puede resultar más sencilla. Para Windows existe una distribución de la DLL de XDebug, que hay que situar junto al resto de extensiones para PHP. Luego ya se puede especificar en el archivo "php.ini" que se cargue la extensión.
Y, una vez en marcha XDebug, prepárate a descubrir un mundo nuevo y alucinante. Lo que más me interesaba en un principio era la capacidad de "profiling" (otra vez) que incorpora XDebug. Con la oportuna opción activada, en el archivo de configuración de PHP, XDebug estará al tanto de la ejecución de nuestros "scripts" PHP.
Cada vez que se ejecuta un script PHP, XDebug guarda en un archivo su "profile". Este archivo puede ocupar un par de "mega bytes", y contiene información formateada de una forma determinada. Este formato es el que reconoce, por ejemplo, el programa WinCacheGrind, que te presenta la información de XDebug de forma visual, por decirlo así.
Desde WinCacheGrind puedes ver el tiempo que consumió la ejecución de un "script" de PHP. Pero, lo bueno comienza cuando descubres que puedes saber cuánto tiempo consumió prácticamente cada instrucción. De este modo es posible averiguar que esta o aquella parte de nuestro "script" consume un tanto por ciento exagerado, y tratar de dar con una posible solución.
Hablo de porcentajes porque XDebug proporciona la información tanto en porcentajes como en milisegundos. Como digo, es del todo alucinante averiguar cuánto consume un "script" de PHP instrucción por instrucción, línea por línea, desde el principio hasta el final de su proceso.
Pero el "profiling" de "scripts" PHP no es lo único que ofrece XDebug. La extensión incorpora a PHP una serie de funciones útiles para depurar aplicaciones, y también sustituye algunas funciones nativas de PHP, como pueda ser "var_dump()", de modo que XDebug aumenta, por decirlo así, su funcionalidad.
Por otro lado, además de todo lo dicho, XDebug también se encarga de mostrar los errores de PHP de una forma más práctica, puesto que una "noticia" de PHP se puede convertir en toda una tabla HTML, que, se muestra en la salida del "script" en proceso, y contiene no poca información acerca de la "noticia".
En definitiva, me alegro de haber probado XDebug, y, probablemente no deje de utilizarla, pues veo que puede echarme una mano en el desarrollo de aplicaciones. Y, para terminar, como no puedo dejar de hablar de Gesbit, diré que su "profiling" ha resultado muy aleccionador.
Ya suponía yo que buena parte del tiempo de proceso de su "script principal", lo ocuparía cierto otro "script", donde se inicializan determinadas variables globales, que guardan instancias de no pocas clases utilizadas en Gesbit. Siendo un poco perspicaz también podría haber supuesto lo que XDebug me ha descubierto.
Y es que la clase que más consume en Gesbit, la que más tiempo de proceso se lleva (no creas, hablamos de la mitad del total, unos 50 milisegundos de un total de 100 milisegundos), digo, pertenece a la biblioteca PHP Gettext, concretamente, el mayor tiempo de proceso se da cuando la correspondiente clase de esta librería "carga" archivo que contiene las cadenas de texto con la traducción de Gesbit a otro idioma.
Era hasta cierto punto lógico. Pero gracias a XDebug he podido verlo en términos de porcentaje. Y no sólo eso, que, como digo, era hasta cierto punto lógico, sino que ahora podríamos seguir más allá y averiguar cuáles son los otros puntos que se llevan su tanto por ciento de tiempo en el proceso de un determinado "script".
Tal vez en el caso de PHP Gettext no pueda hacerse mucho, pero, en otros casos tal vez sí pueda hacerse algo para mejorar el tiempo de proceso. Lo hasta cierto punto divertido de esto es que estamos hablando de milisegundos. Cualquiera diría que si Gesbit necesita 100 milisegundos para procesar su "script" principal puede pasar.
Y así es la verdad, hasta cierto punto. No me veo buscando ganar unos pocos milisegundos, pero, lo cierto es que todo esto del "profiling" es muy curioso, y, además (que he dicho ya que iba a terminar) XDebug no se limita al "profiling", sino que, como ya he dicho, también puede resultar muy, pero que muy útil en otros casos, ayudando a depurar nuestras aplicaciones.