Mejorando el rendimiento de Symfony a base de caché

Symfony no es lento

Se dice que utilizar un framework en general y Symfony en particular penaliza el rendimiento de una aplicación web. Es cierto, al menos a priori. Por mucho trabajo de optimización que se haga, las propias clases del framework consumirán tiempo y recursos y tampoco serán las óptimas las queries de acceso a base de datos generadas. Siempre será más eficiente un código personalizado para la ocasión que un código genérico.

Dicho así podría parecer que es preferible invertir tiempo en hacer código a medida que utilizar herramientas como Symfony. Nada más lejos de la realidad. Una de las cosas que proporciona Symfony, y que compensa con creces “su lentitud”, es un sistema de caché que con muy poco esfuerzo permitirá a una aplicación desarrollada en Symfony “correr” mucho más rápido que una aplicación hecha “a mano”. ¡Ojo! Esto no quita la responsabilidad de hacer un código eficiente.

Activando la caché de página

Efectivamente, hay muchas formas de optimizar el rendimiento de una aplicación, pero sin duda, la caché de página es la que marca la diferencia. Para activarla en Symfony solo hay que crear el fichero cache.yml en el directorio config del módulo (ej. apps/frontend/modules/politico/config/) activando la cache para cada acción en la que se quiera poner en caché:

ranking:
 enabled: on
 with_layout: false
 lifetime: 60

show:
 enabled: on
 with_layout: false
 lifetime: 360

“ranking” y “show” son dos de las acciones del módulo. “with_layou: false” indica que sólo ha de guardarse el código específico de esta vista, no el de layout.php. “lifetime” es el tiempo en segundos que tardará en limpiarse la caché automáticamente.

Limpiando la caché manualmente

Symfony proporciona información del estado de la caché si se necesita

Una de las opciones para limpiar la caché de una página es esperar a que pase el tiempo indicado en “lifetime” en el fichero de configuración. Como esto muchas veces no es una opción, Symfony proporciona un mecanismo para limpiarla por código. El siguiente snipplet (pedacito de código) muestra como, en Voota, se limpia la caché de la página de un político cada vez que alguien deja un comentario:

$cacheManager = $this->getContext()->getViewCacheManager();
if ($cacheManager != null) {
$cacheManager->remove(“politico/show?id=”.$politico->getVanity().”&sf_culture=es”);
$cacheManager->remove(“politico/show?id=”.$politico->getVanity().”&sf_culture=ca”);
}

La clase sfViewCacheManager permite interactuar con el sistema de caché de Symfony. El método “remove” limpia la página que se quiera.

Más rápido incluso

Otra de las funcionalidades que ofrece Symfony es delegar la gestión de la caché a un sistema externo. Unos de los sistemas más conocidos y utilizados dentro y fuera de Symfony es memcached. Una buena idea será dejarle la gestión a él. Esto se configura en el fichero de factorías de la aplicación (apps/frontend/config/factories.yml):

dev:
 view_cache:
  class: sfMemcacheCache
   param:
    lifetime:                  86400 #24h
    prefix:                    vo
    servers:
     server_01:
      host: localhost
      post: 11211

El resto exactamente igual. No será necesario tocar ni una línea de código para esto.

Anuncios

Etiquetas: , ,

4 comentarios to “Mejorando el rendimiento de Symfony a base de caché”

  1. Miguel Martinez Says:

    Hace tiempo que no he tocado php, pero el leer estos ultimos posts de symfony me entusiasma retomar este camino,,,

    Este framework tiene muy buena pinta,
    Probare y ya comentare algo 🙂


    pd. acentos y enies omitidos.

  2. Julio Maraña Says:

    Esto estra Aplicado para Symfony 1 ??? 2 ????

  3. Andres Garcia Says:

    Deberías ser mas especifico ??? no ?

  4. Sergio Viteri Says:

    @Julio, esto sólo aplica a Symfony 1. @Andrés, perdona si no te perece explícito. Si te fijas, el artículo es de 2009. No había más Symfony que éste en ese momento 😉

    Saludos 😉

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s


A %d blogueros les gusta esto: