veilletech.fr
6 nov. Feed du jour
#05 SYMFONY Article

Symfony UX 3.7 : jusqu'à 46 % de CPU en moins

Le gain le plus simple de la version tient dans un cache clear.

Symfony UX 3.7 regroupe plus de 100 pull requests. Sur le tableau de bord de test de l'équipe, TwigComponent et LiveComponent consomment de 15 à 46 % de temps CPU en moins, une fois les templates recompilés. La version ajoute UX CSS, expérimental, sort le UX Toolkit de l'expérimental, et change le comportement de Dropzone.

3 min de lectureintermédiairevidéo 1:16
Partager
Sommaire6 sections
  1. Ce qui se passe
  2. Pourquoi c'est plus rapide
  3. UX CSS, expérimental
  4. Le reste de la version
  5. Ce qui peut casser
  6. À retenir

Ce qui se passe

Symfony UX 3.7 est sortie avec plus de 100 pull requests fusionnées depuis la 3.6. Le changement qui touche le plus de monde n'est pas une fonctionnalité : les pages riches en composants Twig coûtent nettement moins de CPU.

Pourquoi c'est plus rapide

Mesures de l'équipe sur un tableau de bord d'administration de 1 800 composants, dont 28 live (médianes de six séries alternées de 60 requêtes, environnement prod, PHP 8.4, Twig 3.30) :

Requête 3.6 3.7 Écart
Tableau de bord, 25 lignes 57,1-58,9 ms 48,5-51,0 ms −15 %
Tableau de bord, 100 lignes 144,5-149,0 ms 120,0-122,6 ms −18 %
Cocher 3 lignes sur 100 158,0-162,1 ms 85,5-87,5 ms −46 %
Saisie dans la recherche 51,4-51,8 ms 30,0-31,2 ms −40 %

Le gain suppose des templates recompilés : un cache:clear suffit. La syntaxe HTML des composants se compile aussi plus vite : réécrit autour d'un seul scanner, son pré-lexeur traite 672 templates réels en 32 % de temps en moins.

UX CSS, expérimental

Des classes utilitaires écrites en chaînes, à la Tailwind, ne signalent rien quand on les orthographie mal. UX CSS donne à Twig une fonction css(), inspirée de Panda CSS : on lui passe des propriétés et des jetons de design, elle renvoie des noms de classes atomiques. Chaque appel est validé : une propriété ou un jeton inconnu s'affiche en erreur en debug, fait échouer lint:twig en CI et cache:clear au déploiement. Un appel sans valeur dynamique ne coûte rien à l'exécution, ses classes étant figées dans le template compilé. La feuille de style est écrite par PHP, sans Node.js, et fonctionne avec AssetMapper, Symfony Reprise et Webpack Encore.

Le reste de la version

Ce qui peut casser

Dropzone écarte maintenant les fichiers déposés qui ne correspondent pas à l'attribut accept, ou qui dépassent la nouvelle option max_files, et émet dropzone:reject. Certains changements modifient le comportement, notamment si votre CSS règle display sur les parties du composant ou si accept ne liste que des types MIME. Lisez UPGRADE.md de Dropzone avant de mettre à jour. UX CSS et UX Image restent expérimentaux : leur API peut bouger.

Source : blog Symfony. Source en anglais.