Mejoras importantes en el rendimiento de Symfony

El rendimiento del framework Symfony es uno de los temas favoritos de discusión entre sus programadores y también es uno de los argumentos de ataque más utilizados por los que todavía no se han enterado de que no hay una guerra de frameworks PHP. De hecho, en la reciente encuesta de necesidades para Symfony 1.3, la mejora de rendimiento fue la petición número 1 con mucha diferencia.

En los últimos días se han añadido un par de mejoras en la versión de desarrollo de Symfony 1.2 que pueden duplicar el rendimiento de las aplicaciones y hacer diez veces más rápido el sistema de enrutamiento:

  1. Kris Wallsmith, desarrollador del núcleo de Symfony, ha publicado el changeset 16905 para modificar el comportamiento de la clase sfViewCacheManager.class.php y mejorar su rendimiento de forma espectacular. El cambio tiene que ver con las llamadas a md5(serialize()) que son lentísimas cuando se deben serializar objetos muy grandes, como por ejemplo los formularios de Symfony. Evitando esas llamadas, el rendimiento de la aplicación se puede duplicar, pero sólo si utilizas elementos parciales, les pasas objetos grandes y tienes activada la cache de Symfony. Si utilizas pocos elementos parciales o les pasas objetos pequeños, la mejora no es tan espectacular, pero también es apreciable. Esta modificación es tan importante que ya se ha incluido en todas las versiones de desarrollo de Symfony: 1.0, 1.1, 1.2 y 1.3. El artículo del blog oficial de Symfony explica todos los detalles y las pruebas que puedes realizar para comprobar las mejoras. De todas formas, si ya utilizas un bytecode cache de PHP (como por ejemplo APC), las mejoras son inapreciables. En las pruebas que he realizado, en ambos casos la portada del frontend_dev.php del tutorial Jobeet se me genera en unos 70 ms con 7 consultas a la base de datos y la portada del backend_dev.php se me genera en 180 ms con 6 consultas a la base de datos.
  2. Olivier Poitrey, cofundador y director técnico de Dailymotion.com, ha publicado el changeset 16949 que añade al sistema de enrutamiento una nueva opción de configuración llamada lazy_routes_deserialize. En Symfony 1.2, cada ruta es un objeto que se serializa en la cache del sistema de enrutamiento para mejorar el rendimiento de la aplicación. Después, cada petición que recibe la aplicación hace que Symfony deserialice todos los objetos de la cache y busque la ruta adecuada para atender la petición del usuario. El principal problema es que si la aplicación tiene muchas rutas (del orden de cientos de rutas) y la ruta buscada se encuentra entre las primeras, se han deserializado cientos de objetos para nada. La opción lazy_routes_deserialize hace que el objeto de una ruta sólo se deserialice cuando haga falta, es decir, cuando realmente se ha encontrado la ruta que se va a utilizar. Si tu aplicación tiene muchas rutas (del orden de cientos) este cambio hace que el sistema de enrutamiento sea diez veces más rápido. El artículo del blog oficial de Symfony incluye todos los detalles y explica cómo activar esta opción que por defecto está desactivada.

Este último cambio demuestra que con el software libre todos salimos ganando:

  1. Los creadores de Dailymotion.com ganan porque consiguen un framework espectacular y muy probado de forma gratuita.
  2. Los creadores de Symfony ganan porque Dailymotion.com les contrata servicios de consultoría.
  3. Symfony gana porque en Dailymotion.com lo prueban al límite, corrigen errores y le añaden mejoras importantes.
  4. Todos nosotros ganamos porque nuestro framework favorito cada día es mejor.

Comentarios

  1. Espectacular!... viva el software libre y sobre todo... que bien por Symfony, pienso que si otros proyectos libres tuvieran una comunidad como la de symfony fueran mucho mejores.

    Es cierto que no hay una guerra de Frameworks PHP, pero no hay duda que symfony se acerca cada vez mas a ser el framework php integral universal.

    Saludos,

    ismael el 5 de abril de 2009, 21:07:29

  2. Es una suerte tener un framework PHP a la altura de Ruby On Rails o Django.

    David el 11 de abril de 2009, 15:48:31

Este artículo ya no permite añadir más comentarios.
¿Por qué? Los artículos cierran sus comentarios automáticamente unos meses después de su publicación para asegurar que estos sigan siendo relevantes.

Publicada el

5 de abril de 2009

Etiquetas

Proyectos Symfony destacados

La forma más sencilla de generar el backend de tus aplicaciones Symfony. Ver más

Síguenos en @symfony_es para acceder a las últimas noticias.