2012-05-10 19 views
7

Actualmente estoy construyendo una aplicación web usando Zend framework 1.11.11 y Doctrine 2.2. Busqué mucho las mejores formas y hacks para optimizar los marcos utilizados.Doctrine 2 optimización extrema

Durante mi búsqueda de optimización de Zend Framework me encontré con este mensaje: Optimising the Zend Framework

Lo interesante de esto es que menciona algunas técnicas de optimización que surgieron de la utilización del marco en sí y no estaba cubierto de el manual en sí, como por ejemplo:

  • desactivar viewRenderer y ocuparse de ver renderizar usted mismo.

Ahora estoy buscando técnicas similares que podrían aplicarse a Doctrine 2 además de las mencionadas here in the manual.

Nota

Sé que muchos mencionará el perfil de la consulta, el almacenamiento en caché y encontrar el cuello de botella de la aplicación, pero eso no es um buscando :) Estoy buscando mejoras prácticas descubiertos durante el uso Doctrina 2.

Gracias;)

Respuesta

11

Bueno, la optimización y la piratería Doctrina 2 no será una tarea fácil. Sólo puedo aconsejar a seguir el oficial "mejores prácticas":

  • Uso caché de consultas
  • uso de caché de metadatos
  • Pre-generar proxies
  • Evitar los oyentes (o fusionarlos por tipo de evento (al ras , actualización), evitará el tiempo de búsqueda y el bucle de eventos suscritos)
  • uso perezoso de carga siempre que sea posible
  • Asegúrese de que sus relaciones o herencia no están en mal estado

(Tenga en cuenta que no he mencionado caché de resultados que debe no ser una forma de optimizar una aplicación)

de mi uso, la parte más importante que tenía que optimizar no era doctrina misma (mientras hay optimizaciones para hacer al núcleo) pero la consulta generada, como siempre, I EXPLAIN ed las consultas y los índices optimizados.

Doctrina 2 puede ser alto consumo de memoria por lo que la carga de una gran cantidad de entidades a la vez puede ralentizar su aplicación, puede que le resulte útil para conocer acerca clear(), detach(), iterate() métodos.

A pesar de que Doctrine 2 a veces puede ser lento, noté principalmente que podía optimizar la aplicación en otro lugar, dentro de Zend Framework o PHP.

Digamos, Doctrine 2 lleva 100ms donde Zend Framework toma 300ms para un total de 450ms (E/S, funciones internas de PHP, etc.)

Si puede dividir fácilmente por dos el tiempo empleado por Zend Framework, la optimización de Doctrine 2 para obtener como 10% no aumentará notablemente la velocidad de su aplicación. Piénselo dos veces.

Éstos son algunos consejos:

  • Crear su propio punto de vista en lugar de utilizar Ayudantes (evitar las operaciones de búsqueda ayudante)
  • caché de su Zend_Config objeto (carga muy pesada)
  • Evitar rutas expresiones regulares siempre que sea posibles rutas (ZF son un gran cuello de botella)
  • Utilice un cargador automático ClassMap en lugar de la Zend_Loader_Autoloader nativa

Hay toneladas de optimización que hacer, algunas tienen un impacto real mientras que otras no.

Asegúrese de encontrarlos mediante el perfil de su aplicación, una herramienta fácil y multiplataforma es usar webgrind.

+1

+1 Gracias por la respuesta detallada, pero podría explicar más sobre este punto _Evite las rutas Regex siempre que sea posible (las rutas ZF son un gran cuello de botella) _? En realidad, hace un tiempo tuve una publicación que me preguntaba por lo mismo. Tal vez pueda dar una respuesta [Optimizando las rutas de Zend framework] (http://stackoverflow.com/questions/10070634/optimizing-zend-framework-routes) – Songo

+1

Dado que esta respuesta es muy antigua, ** pista: ** hacer asegúrese de actualizar a Zend Framework 2, que ha sido reescrito desde cero y es mucho más rápido en la mayoría de los escenarios. –