Nuevo en Symfony 5.1: Precarga de clases configurable

La precarga de clases PHP es una de las mejores funcionalidades añadidas en PHP 7.4. La precarga consiste en procesar y cargar en memoria algunos archivos PHP antes de que la aplicación arranque. Estos archivos precargados están disponibles para todas las peticiones siguientes sin tener que procesarlos.

Durante la precarga, PHP también resuelve todas las dependencias de classes, como la herencia de clases, las interfaces, los traits, etc. PHP también elimina cualquier include innecesario y realiza otras optimizaciones. El resultado es una mejora significativa en el rendimiento de tus aplicaciones.

Symfony es compatible con la precarga de PHP desde la versión 4.4. En Symfony 5.1 la hemos mejorado para que sea más fácil de configurar mediante dos etiquetas de inyección de dependencias llamadas container.preload y container.no_preload.

En primer lugar, container.preload permite definir qué clases se deben precargar. Añade una o más de estas etiquetas en tus servicios para precargar tantas clases como necesites. Por ejemplo, en el propio código de Symfony utilizamos esta etiqueta para precargar varias clases relacionadas con el servicio twig:

services:
    twig:
        class: Twig\Environment
        # ...
        tags:
            - { name: 'container.preload', class: 'Twig\Cache\FilesystemCache' }
            - { name: 'container.preload', class: 'Twig\Extension\CoreExtension' }
            - { name: 'container.preload', class: 'Twig\Extension\EscaperExtension' }
            - { name: 'container.preload', class: 'Twig\Extension\OptimizerExtension' }
            # ...

La etiqueta container.no_preload se utiliza para lo contrario, ya que le indica a PHP que no tiene que cargar cierta clase. Esta etiqueta no define el atributo class, sino que se aplica directamente a un servicio y PHP no precarga la clase relacionada con ese servicio:

services:
    twig.template_cache_warmer:
        class: Symfony\Bundle\TwigBundle\CacheWarmer\TemplateCacheWarmer
        # ...
        tags:
            - { name: 'container.no_preload' }

Otro cambio relacionado con la precarga de clases es que el método warmUp() de los cache warmers de Symfony ahora tienen que devolver un array con los FQCN (namespace + nombre de clase) de todas las clases a precargar. No hacerlo se consider obsoleto desde Symfony 5.1.

Todas estas mejoras ya se están utilizando el propio código de Symfony. En nuestros análisis de rendimiento, una aplicación de prueba pasó de 360 peticiones por segundo a 630 peticiones por segundo, una mejora de rendimiento del 75%.

En tus propias aplicaciones, estas mejoras de rendimiento serán diferentes. Para aprender todo sobre la precarga de clases PHP en las aplicaciones Symfony, te puedes apuntar al próximo evento SymfonyLive Online, que tendrá lugar el viernes 17 de abril de 2020.

Esta funcionalidad fue contribuida por Nicolas Grekas en el pull request #36195 y #36209.


Fuente: New in Symfony 5.1: String improvements

Comentarios

Publicada el

10 de abril de 2020

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.