Symfony 1.0, la guía definitiva

18.6. Optimizando el código fuente

También es posible mejorar el rendimiento de la aplicación optimizando el código fuente de la propia aplicación. En esta sección se ofrecen algunos consejos al respecto.

18.6.1. Compilación del núcleo de Symfony

Cargar 10 archivos requieren muchas más operaciones de entrada/salida que cargar un solo archivo grande, sobre todo en discos lentos. Además, cargar un archivo muy grande consume muchos más recursos que cargar un archivo menor, sobre todo si una gran parte del archivo grande contiene información ignorada por PHP, por ejemplo los comentarios.

Por lo tanto, una operación que mejora mucho el rendimiento consiste en juntar una serie de archivos en un solo archivo y eliminar todos sus comentarios. Symfony ya realiza esta optimización y se llama compilación del núcleo de Symfony. Al principio de la primera petición (o después de que se haya borrado la cache) la aplicación Symfony concatena todas las clases del núcleo del framework Symfony (sfActions, sfRequest, sfView, etc.) en un solo archivo, optimiza el tamaño del archivo eliminando los comentarios y los espacios en blanco sobrantes y lo almacena en la cache, en un archivo llamado config_core_compile.yml.php. Las siguientes peticiones solamente cargan este archivo optimizado en lugar de los 30 archivos individuales que lo componen.

Si la aplicación dispone de clases que deben cargarse siempre y sobre todo si son clases grandes con muchos comentarios, puede ser muy beneficioso añadirlas a la compilación del núcleo de Symfony. Para ello, se crea un archivo llamado core_compile.yml en el directorio config/ de la aplicación y se listan las clases que se quieren añadir, como se muestra en el listado 18-22.

Listado 18-22 - Añadiendo las clases al archivo de compilación del núcleo de Symfony, en miaplicacion/config/core_compile.yml

- %SF_ROOT_DIR%/lib/miClase.class.php
- %SF_ROOT_DIR%/apps/miaplicacion/lib/miToolkit.class.php
- %SF_ROOT_DIR%/plugins/miPlugin/lib/miPluginCore.class.php
...

18.6.2. El plugin sfOptimizer

Symfony dispone de otra herramienta de optimización llamada sfOptimizer. Esta herramienta aplica varias estrategias de administración sobre el código de Symfony y el código de la aplicación, lo que permite acelerar la ejecución de la aplicación.

El código de Symfony realiza muchas comprobaciones sobre las opciones de configuración, y puede que la aplicación también lo haga. Si se observa el código de las clases de Symfony, se encuentran por ejemplo muchas comprobaciones del valor de la opción de configuración sf_logging_enabled antes de realizar una llamada al objeto sfLogger:

if (sfConfig::get('sf_logging_enabled'))
{
   $this->getContext()->getLogger()->info('Ha pasado por aquí');
}

Incluso aunque el registro creado con sfConfig está muy optimizado, el número de llamadas realizadas al método get() durante el procesamiento de cada petición es muy importante, lo que penaliza el rendimiento de la aplicación. Una de las estrategias de optimización de sfOptimizer consiste en reemplazar las constantes de configuración por su valor real, siempre que estas constantes no varíen durante la ejecución de la aplicación. Este es el caso de la opción sf_logging_enabled; si el valor de esta opción se establece a false, el plugin sfOptimizer transforma el código anterior en lo siguiente:

if (0)
{
   $this->getContext()->getLogger()->info('Ha pasado por aquí');
}

Y eso no es todo, ya que una comprobación tan evidente como la anterior, se transforma en una cadena de texto vacía.

Para aplicar las optimizaciones, se instala el plugin desde http://trac.symfony-project.org/wiki/sfOptimizerPlugin y después se ejecuta la tarea optimize, especificando el nombre de una aplicación y de un entorno:

> symfony optimize miaplicacion prod

Si se quieren aplicar otras estrategias de optimización al código fuente, el plugin sfOptimizer puede ser un buen punto de partida.