2008-09-25 20 views
33

Me gustaría encontrar una manera de determinar cuánto tiempo tarda cada función en PHP y cada archivo en PHP para ejecutarse. Tengo una aplicación antigua de PHP heredada en la que trato de encontrar los "puntos difíciles" y me gustaría ubicar qué rutinas y páginas tardan mucho en cargarse, objetivamente.Generación de perfiles de código PHP

¿Existen herramientas prefabricadas que lo permitan, o estoy atascado usando microtime, y estoy construyendo mi propio framework de perfiles?

+1

posible duplicado de [manera más simple de perfil de un script PHP] (http://stackoverflow.com/questions/21133/simplest-way-to-profile-a-php-script) –

Respuesta

42

La semana pasada realicé algunos trabajos de optimización. XDebug es de hecho el camino a seguir.

Simplemente activa como una extensión (por alguna razón que no funcionaría con ze_extension en mi máquina Windows), la configuración de su php.ini con xdebug.profiler_enable_trigger = On y llamar a sus URL normales con XDEBUG_PROFILE = 1, ya sea como obtener o una variable de publicación para perfilar esa misma solicitud. ¡No hay nada más fácil!

Además, realmente puedo recomendar webgrind, un proyecto basado en web (php) google Summer Of Code que puede leer y analizar los archivos de salida de depuración.

+0

Alternativa a la webgrind en máquinas con Windows: Wincachegrind (una aplicación de escritorio). –

6

eche un vistazo a xdebug, que permite la creación de perfiles en profundidad. Y here's an explanation de cómo usar xdebug.

perfiles de Xdebug es una potente herramienta de que proporciona la capacidad de analizar su código PHP y determinar cuellos de botella o, en general, que ven partes de su código son lentos y podrían utilizar un impulso de velocidad. El generador de perfiles en Xdebug 2 genera información de perfiles en forma de un archivo compatible con cachegrind.

Felicitaciones a SchizoDuckie para mentioningWebgrind. Esta es la primera vez que escucho sobre esto. Muy útil (+1).

De lo contrario, puede usar kcachegrind en Linux o su derivada menor wincachegrind. Ambas aplicaciones leerán los archivos de salida del perfilador de xdebug y los resumirán para su placer visual.

1

Si instala la extensión xdebug, puede configurarla para exportar perfiles de ejecución, que puede leer en WinCacheGrind (en Windows). No recuerdo el nombre de la aplicación que lee los archivos en Linux.

3

Una vez vi un elenco de pantalla para Zend Core. Se ve bastante bien, pero en realidad cuesta dinero, no sé si eso es un problema para ti.

2

Las funciones de creación de perfiles de xdebug son bastante buenas. Si logra guardar la salida en valgrind-format, puede usar algo como KCachegrind o Wincachegrind para ver el gráfico de llamadas y, si es un tipo visual de persona, resuelva más fácilmente lo que está sucediendo.

3

XDebug es agradable, pero no es tan fácil de usar o configurar IMO.

El perfilador integrado en Zend Studio es muy fácil de usar. Solo tiene que presionar un botón en la barra de herramientas del navegador y BAM tiene su perfil de código. Quizás no sea tan profundo como un volcado de CacheGrind, pero siempre ha sido lo suficientemente bueno para mí.

También necesita configurar Zend Platform, pero eso es sencillo y gratuito para el uso en desarrollo; sin embargo, aún tendría que pagar por la licencia de Zend Studio.

+3

Tres años y medio después, estaría en desacuerdo conmigo mismo ahora. Facebook tiene una herramienta de creación de perfiles de código abierto llamada XHProf que es realmente agradable y liviana y lo suficientemente fácil como para instalar y ejecutar –

0

La solución más fácil es utilizar Zend Profiler, no necesita Zend Platform para usar, puede ejecutarlo directamente desde su navegador, es bastante preciso y tiene la mayor cantidad de funciones que necesita y está integrado en Zend Studio

2

Además de contar con poderosas capacidades de depuración en tiempo real, PhpED de NuSphere (www.nusphere.com) tiene un generador de perfiles integrado que se puede ejecutar con un solo clic desde el interior del IDE.

7

Aquí hay un buen consejo.

Cuando se utiliza XDebug perfil de su PHP, configurar el profiler_trigger y utilizar esto en un bookmarklet para activar el generador de perfiles XDebug;)

javascript:if(document.URL.indexOf('XDEBUG_PROFILE')<1){var%20sep=document.URL.indexOf('?');sep%20=%20(sep<1)?'?':'&';window.location.href=document.URL+sep+'XDEBUG_PROFILE';}