Twig : accélérer la génération de ses templates
Agence web » Actualités du digital » Twig : render controller, le faux bon ami

Twig : render controller, le faux bon ami

Lors du stand’up du lundi matin, un des développeurs de la startup qui était en phase d’optimisation d’une plateforme fait en Symfony2, a eu la bonne idée de nous expliquer le fonctionnement de cette fonctionnalité Twig dont vous abusez probablement. Le render controller !

Le render ?

Qu’est-ce que le render ? Cela est simple, comme on dit… C’est comme le Port-Salut, c’est écrit dessus ! Ou presque… En tout cas, le render permet de générer le rendu de quelque chose. En l’occurrence, le problème ici, c’est lorsqu’on essaye d’afficher le rendu d’un controller dans un template.

Combo : Render Controller

Le render controller correspond comme noté au paragraphe précédent afficher le rendu d’un controller. Là où l’utilisation de ce type de code devient une mauvaise pratique, c’est que l’appel du contrôleur fait appel à tout le workflow Symfony. Il y a alors le double d’objet à générer.

1
{{ render(controller(‘NamespaceNameBundle:Controller:Action’, {})) }}

Vous pouvez rapidement comprendre qu’il y a une redondance de code énorme, une redondance de variable énorme comme le container, la variable à tout faire.

Benchmark

J’ai récemment pu vérifier et je vous propose un petit graphe pour illustrer mes propos.

Dans un premier cas, les pages générés intégraient constamment un render controller. Cela était constamment appelé. J’ai testé le temps d’exécution de ces pages « lites » pour avoir des temps de réponse entre 190 et 200ms. Je vous l’accorde, il s’agit de petit page.

J’ai ensuite remplacer mes render controller par un appel dans un listener (onKernelRequest). De cette manière, un seul contrôleur est appelé. J’ai ensuite testé et les temps de réponses avaient drastiquement diminués ! Entre 110 et 140ms. Bien évidemment, sur des temps aussi faibles, difficiles de voir à vue d’œil la différence, mais sur un projet conséquent, on ressent rapidement la différence. Ici si on fait un rapide calcul, les gains sont de l’ordre 25 à 45%.

Conclusion

Même si c’est chiffre sont à prendre avec précaution, on remarque que le même rendu est nettement plus rapide lorsqu’on évite le render controller. Dans de nombreux cas, il s’agit d’une solution de faciliter, et mettre un manager en plus est tout aussi simple.

★★★★★