Symfony 1.0, la guía definitiva

12.3. Probando y monitorizando la cache

La cache de HTML puede provocar incoherencias en los datos mostrados si no se gestiona correctamente. Cada vez que se activa la cache para un elemento, se debe probar y monitorizar la mejora obtenida en el rendimiento de su ejecución.

12.3.1. Creando un entorno de ejecución intermedio

El sistema de cache es propenso a crear errores en el entorno de producción que no se pueden detectar en el entorno de desarrollo, ya que en este último entorno la cache HTML está deshabilitada por defecto. Si se habilita la cache de HTML para algunas acciones, se debería crear un nuevo entorno de ejecución llamado staging en este capítulo y con las mismas opciones que el entorno prod (por lo tanto con la cache activada) pero con la opción web_debug activada (valor on).

Para crear el nuevo entorno, se deben añadir las líneas mostradas en el listado 12-12 al archivo settings.yml de la aplicación.

Listado 12-12 - Opciones del entorno staging, en miapp/config/settings.yml

staging:
  .settings:
    web_debug:  on
    cache:      on

Además, se debe crear un nuevo controlador frontal copiando el de producción (que seguramente se llamará miproyecto/web/index.php) en un archivo llamado miapp_staging.php. En este archivo copiado es necesario modificar el valor de SF_ENVIRONMENT y SF_DEBUG, tal y como se muestra a continuación:

define('SF_ENVIRONMENT', 'staging');
define('SF_DEBUG',        true);

Y solo con esos cambios ya se dispone de un nuevo entorno de ejecución. Para probarlo, se añade el nombre del controlador frontal a la URL después del nombre de dominio:

http://miapp.ejemplo.com/miapp_staging.php/usuario/listado

Truco En vez de copiar un controlador frontal existente, es posible crear un nuevo controlador frontal mediante la línea de comandos de Symfony. Para crear un entorno llamado staging en la aplicación miapp llamado miapp_staging.php y con la opción SF_DEBUG igual a true, se puede ejecutar el siguiente comando: symfony init-controller miapp staging miapp_staging true.

12.3.2. Monitorizando el rendimiento

El Capítulo 16 describe en detalle la barra de depuración de aplicaciones y sus contenidos. No obstante, como esa barra también contiene información relacionada con los elementos guardados en la cache, se incluye ahora una breve descripción de sus características relacionadas con la cache.

Cuando se accede a una página que contiene elementos susceptibles de estar en la cache (acciones, elementos parciales, fragmentos, etc.) la barra de depuración web (que aparece en la esquina superior izquierda) muestra un botón para ignorar la cache (una flecha curvada verde), como se puede ver en la figura 12-4. Este botón se emplea para recargar la página y forzar a que se procesen todos los elementos que estaban en la cache. Se debe tener en cuenta que este botón no borra la cache.

El último número que se muestra en la derecha de la barra es el tiempo que ha durado la ejecución de la petición. Si se habilita la cache en una página, este número debería ser muy inferior al recargar la página, ya que Symfony utilizará los datos de la cache en vez de volver a ejecutar por completo los scripts. Este indicador se puede utilizar para monitorizar fácilmente las mejoras introducidas por la cache.

Barra de depuración web en las páginas que utilizan la cache

Figura 12.4 Barra de depuración web en las páginas que utilizan la cache

La barra de depuración también muestra el número de consultas de base de datos que se han ejecutado para la petición, el detalle del tiempo de ejecución de cada categoría (se muestra al pulsar sobre el tiempo de ejecución total). Monitorizando esta información es sencillo medir las mejoras en el rendimiento que son debidas a la cache.

12.3.3. Pruebas de rendimiento (benchmarking)

La depuración de las aplicaciones reduce notablemente la velocidad de ejecución de la aplicación, ya que se genera mucha información para que esté disponible en la barra de depuración web. De esta forma, el tiempo total de ejecución que se muestra cuando se accede a la aplicación en el entorno staging no es representativo del tiempo que se empleará en producción, donde la depuración está deshabilitada.

Para obtener información sobre el tiempo de ejecución de cada petición, deberían utilizarse herramientas para realizar pruebas de rendimiento, como Apache Bench o JMeter. Estas herramientas permiten realizar pruebas de carga y calculan dos parámetros muy importantes: el tiempo de carga medio de una página y la capacidad máxima del servidor. El tiempo medio de carga es esencial para monitorizar las mejoras de rendimiento introducidas por la activación de la cache.

12.3.4. Identificando elementos de la cache

Cuando la barra de depuración web está activada, los elementos de la página que se encuentran en la cache se identifican mediante un recuadro rojo, además de que cada uno dispone de una caja de información sobre la cache en la esquina superior izquierda del elemento, como muestra la figura 12-5. La caja muestra un fondo azul si el elemento se ha ejecutado y un fondo de color amarillo si se ha obtenido directamente de la cache. Al pulsar sobre el enlace de información de la cache se muestra el identificador del elemento en la cache, su tiempo de vida y el tiempo que ha transcurrido dede su última modificación. Esta información es útil para resolver problemas con elementos fuera de contexto, para ver cuando se crearon los elementos y para visualizar las partes de la plantilla que se pueden guardar en la cache.

Identificación de los elementos de la página que se guardan en la cache

Figura 12.5 Identificación de los elementos de la página que se guardan en la cache