2011-09-18 26 views
7

Tengo problemas de rendimiento en Zend MVC.Perfilado lento Configuración de Zend Framework MVC

puedo tener un solo controlador, que sólo hace die(), y me permitió Xdebug, y se detuvo webgrind en mi petición, que me dice:

789 different functions called in 2150 milliseconds (1 runs, 137 shown) 

que estoy teniendo problemas para determinar exactamente qué está tomando tanto tiempo :

[procedural]  {main} O 1 9 2150 
[class]  Zend_Application_Bootstrap_BootstrapAbstract->_bootstrap O 5 7 1203 
[class]  Zend_Config_Ini->_processKey O 622  451  1191 
[class]  Zend_Config_Ini->_processSection O 2 49 1023 
[class]  Zend_Application_Bootstrap_BootstrapAbstract->_executeResource O 16 11 1017 

(lo anterior me dice más o menos que es el sistema de arranque disparar hasta clases definidas en mi application.ini - pero no tengo ni idea de cuáles son lentos)

¿Cuál es una buena manera de identificar exactamente qué paso del código toma la mayor parte del tiempo de procesamiento?

+1

* (sugerencia) * [Zend Framework Performance Guide] (http://framework.zend.com/manual/en/performance.html) – Gordon

+0

@Gordon Eso está muy desactualizado en muchos lugares. Mucho de eso ni siquiera es muy efectivo. Algunos incluso empeoran el rendimiento. –

+0

@ Jani sin ofender, pero si tengo la opción entre alguien que reclama algo sin pruebas y una guía de referencia oficial, me quedaré con la guía de referencia oficial. Obtuve buenos resultados con los consejos dados allí. – Gordon

Respuesta

7

usted debería ser capaz de ampliar webgrind de salida para localizar cuál es su llamada a la función más lento. Alternativamente, puede usar function trace feature de Xdebug durante su sesión de generación de perfiles para obtener más información sobre sus llamadas a funciones.

En general, debe usar el caché siempre que sea posible. Memcache es más rápido que APC como Zend_Cache backend, pero aún necesita la extensión APC instalada (incluso en modo de desarrollo) para obtener una gran aceleración de su código. Hice una evaluación comparativa de su impacto en Zend Framework Quick Start on my blog (esa publicación está en italiano, pero los datos de referencia están en inglés) y el resultado es bastante impresionante, una aceleración de 3 veces para la página de inicio.

He aplicado la idea de caché también para el archivo de configuración Zend_Application (que en su ejemplo toma la mitad del tiempo de creación de perfiles). Lo discutí here con Matthew Weier O'Phinney, líder del proyecto Zend Framework. Lo que hice fue reemplazar el método predeterminado Zend_Application_loadConfig por uno personalizado que almacena en caché el resultado del archivo analizado. Puedes encontrar mi clase que implementa esta estrategia here on github.

+0

¡El rastro de la función era lo que estaba buscando! Además, su enfoque de caché de application.ini parece prometedor para mi caso :) –

4

Después de haber eliminado el require_once de la biblioteca como se explica en la guía de rendimiento oficial, debe instalar un caché de código de operación, como Zend Server CE, APC o eAccelerator, incluso en su máquina de desarrollo.

Además, algunos plugins de recursos que puede configurar en el almacenamiento en caché de datos application.ini puede requerir con el fin de realizar bien, como Zend_Db, Zend_Loader, etc (no voy a explicar la diferencia con el caché de código de operación aquí)

Don No olvides que en la producción (y realmente lo espero) utilizas el código de operación y el almacenamiento en memoria caché, por lo que debes comparar en condiciones cercanas.

En desarrollo, definitivamente definirá un caché que invalida muy rápido, por lo que siempre actualice su página al menos dos veces seguidas antes de mirar el ms.

Y luego puede comenzar a preocuparse por sus cuellos de botella "reales".

Ok eso fue sobre el rendimiento de arranque de ZF. Pero tu pregunta era sobre el código de perfil. Yo uso de herramientas no libres para ello, pero Xdebug combinado con kcachegrind también lo hace bastante bien: http://xdebug.org/docs/profiler

+0

¿Qué herramientas estás usando? Todavía estoy buscando un buen perfilador de php. – Fabio

+0

Perfil con Zend Studio + Zend Debugger. My Zend Debugger está instalado en Zend Server CE, pero puede descargarlo e instalarlo en cualquier pila de lámparas que elija. He leído en algún lado que Zend Debugger también funciona en PhpStorm, pero no sé si también se está perfilando allí, no solo depurando –

+0

Pero, sinceramente, Xdebug + Kcachegrind hace el trabajo muy bien, estoy en una solución de Zend Studio debido a su integración con Zend Server Entreprise de mi cliente, y es la única razón. –