La manera más efectiva para mejorar el rendimiento de una aplicación consiste en guardar en la caché el contenido completo de una página para poder servirla después sin tener que ejecutar de nuevo la aplicación. Obviamente, esto es bastante difícil para los sitios web que son muy dinámicos. En este capítulo te explicaremos cómo funciona el sistema de caché Symfony2 y por qué esta es la mejor solución posible.
El sistema de caché Symfony2 es diferente a las cachés tradicionales porque se basa en la simple pero potente caché de HTTP, tal y como se recoge en la especificación de HTTP. En lugar de reinventar un sistema de caché, Symfony2 adopta la estándar que define el propio funcionamiento de la web. Una vez que comprendas los principios fundamentales de los modelos de caducidad y validación de la memoria caché de HTTP, ya dominarás el sistema de caché Symfony2.
El proceso para aprender a manejar la caché de Symfony2 se va a dividir en cuatro pasos:
- Una gateway cache o "proxy inverso" es una capa de caché independiente que se encuentra por encima de tu aplicación. El proxy inverso guarda en la caché las respuestas que genera la aplicación y trata de servir las peticiones de los usuarios utilizando esas páginas cacheadas. Symfony2 ya incluye su propio proxy inverso, pero puedes utilizar cualquier otro tipo de proxy inverso que quieras.
- Las cabeceras de HTTP relacionadas con la caché se utilizan para comunicarse con el proxy inverso y con cualquier otra caché que exista entre tu aplicación y el cliente. Symfony2 aplica valores por defecto adecuados a todas estas cabeceras y proporciona métodos para modificar fácilmente todos estos valores.
- Los modelos de caducidad y validación de HTTP son los dos modelos utilizados para determinar si el contenido guardado en la caché es fresh (todavía se puede utilizar) o stale (ha caducado y debe borrarse de la caché para que la aplicación regenere el contenido).
- ESI (del inglés Edge Side Includes) permite utilizar la caché de HTTP para guardar fragmentos de la página de manera independiente. Al utilizar ESI puedes guardar por ejemplo en la caché la página entera durante 60 minutos y una de sus barras laterales durante sólo 5 minutos.
Como la caché HTTP no es algo exclusivo de Symfony, existen muchos artículos sobre el tema. Si eres novato en el tema de la caché HTTP, te recomendamos el artículo Things Caches Do de Ryan Tomayko y el Cache Tutorial de Mark Nottingham.