Sylius V2 - Compatibilité avec Symfony 7

La sortie de Sylius V2 marque une avancée majeure pour les développeurs e-commerce. Désormais compatible avec Symfony 7, cette version offre des performances inégalées, un code simplifié et des outils innovants pour accélérer vos projets PHP.

Performances accrues grâce à Symfony 7

La compatibilité avec Symfony 7 permet à Sylius V2 de tirer parti des optimisations majeures en termes de gestion des requêtes, d’exécution du code et de gestion de la mémoire. Ces améliorations rendent les applications plus réactives et scalables.

Les nouveautés de Symfony 7

Early Hints pour une navigation rapide

Les "Early Hints" représentent l'une des techniques les plus récentes et les plus efficaces pour améliorer l'expérience utilisateur en optimisant les performances perçues de vos sites web et applications. Grâce aux "Early Hints", les serveurs peuvent indiquer aux navigateurs quelles ressources essentielles (telles que les fichiers CSS, JavaScript, polices web, etc.) doivent commencer à être chargées immédiatement, avant même que la réponse complète du serveur ne soit prête.

Comment fonctionnent les Early Hints ?

D'un point de vue technique, les Early Hints utilisent une réponse HTTP avec le code de statut 103. Cette réponse contient des en-têtes HTTP qui précisent les ressources à précharger. Par exemple, un serveur pourrait informer le navigateur qu'il doit commencer à charger certains fichiers CSS ou JS avant même de recevoir la réponse complète :

103 Early Hints
Link: ; rel=preconnect
Link: ; rel=preload; as=style
Link: ; rel=preload; as=script

Ces en-têtes permettent au navigateur de préparer ces ressources avant même que la page complète soit envoyée. Bien que ces ressources soient également envoyées dans la réponse complète, leur pré-chargement rapide améliore de manière significative la performance perçue de la page.

D'après des études de Cloudflare, cette méthode peut entraîner une amélioration de la performance allant de 10% à 20% en fonction du type de site web.

Implémentation des Early Hints dans Symfony

Symfony 7 facilite l'intégration des Early Hints grâce à la méthode pratique sendEarlyHints(), disponible dans la classe AbstractController. Voici un exemple de la manière dont vous pouvez l'utiliser pour pré-charger des ressources :

Early Hints

La méthode sendEarlyHints() permet de créer et d'envoyer une réponse HTTP avec un code 103 pour les Early Hints, puis retourne l'objet Response que vous pouvez utiliser pour envoyer la réponse complète de la page.

Gestion des assets simplifiée

Avec Symfony 7, AssetMapper vous permet de créer un frontend moderne en exploitant les dernières normes web telles que les modules ECMAScript (ESM), les importmaps et le préchargement des ressources, sans avoir besoin d'outils de construction complexes ou de configuration Node. Cette approche simplifie considérablement l'intégration des fichiers JavaScript et CSS dans votre application, vous permettant de vous concentrer davantage sur la logique métier et moins sur la configuration.

1. Installer les packages JavaScript dans votre application
composer require symfony/asset-mapper
php bin/console importmap:require js-confetti
2. Utiliser les packages immédiatement
// assets/app.js
import JSConfetti from 'js-confetti';

const jsConfetti = new JSConfetti();
jsConfetti.addConfetti();

Comme vous pouvez le voir, avec AssetMapper, l'ajout de nouvelles bibliothèques JavaScript devient un jeu d'enfant. Il suffit d'importer la bibliothèque, de l'initialiser, puis de l'utiliser. Aucune configuration complexe n'est nécessaire, et cela fonctionne directement lors du rechargement de la page.

Profilage des commandes console

Le Symfony Profiler est l'un des outils les plus appréciés des développeurs Symfony. Il collecte toutes les informations relatives aux requêtes HTTP, ce qui permet de les inspecter facilement lors de l'identification des problèmes dans une application. Cependant, à partir de Symfony 6.4 et 7.0, il devient encore plus puissant en offrant la possibilité de profiler également les commandes console.

Profilage des commandes console avec Symfony 7

Le profilage des commandes console permet aux développeurs d'analyser le comportement de leurs commandes personnalisées, d'inspecter leur exécution et d'optimiser leur performance. Voici comment vous pouvez en profiter :

Utilisation de l'option --profile

Pour profiler une commande, il suffit d'ajouter l'option --profile lors de son exécution :

php bin/console --profile app:my-command

Lorsque cette option est activée et que le mode de débogage est activé dans votre application, Symfony collecte les informations relatives à la commande en cours d'exécution. Une fois que la commande est terminée (ou interrompue), vous pouvez consulter son profil dans le même Symfony Profiler que celui utilisé pour les requêtes HTTP.

Afficher le profil dans la console

Si vous exécutez la commande en mode verbeux (-v), Symfony affichera un lien cliquable vers le profil de la commande dans la sortie de la console (si votre terminal supporte les liens). En mode de débogage plus détaillé (-vvv), vous pourrez également voir le temps et la mémoire consommés par la commande, ce qui vous permet d'optimiser les performances des commandes personnalisées.

Exemple d'utilisation

Voici un exemple d'utilisation de cette fonctionnalité dans un terminal :

php bin/console --profile app:my-command

En ajoutant l'option --profile, Symfony va collecter et afficher des informations sur l'exécution de la commande. Après l'exécution, vous pouvez accéder à un rapport détaillé directement dans le Profiler Symfony pour analyser la performance de votre commande.

Early Hints

Webhooks et RemoteEvent

Les Webhooks permettent aux applications de réagir à des événements externes sans avoir besoin de constamment interroger des services tiers. Symfony 7 introduit un nouveau composant Webhook et un composant RemoteEvent pour intégrer facilement des notifications d'événements externes et améliorer la réactivité des applications.

Un webhook est une fonction qui vous permet de recevoir une notification en temps réel lorsque des événements externes se produisent. Par exemple, lorsqu'une mise à jour est effectuée sur un dépôt GitHub, un webhook peut être utilisé pour informer immédiatement votre application afin de traiter cette mise à jour.

Voici un exemple de la manière dont vous pouvez configurer un Webhook dans Symfony 7 :

webhook

Dans cet exemple, nous utilisons un parseur pour analyser la requête et vérifier que le contenu correspond aux critères définis. Ensuite, nous créons un événement qui peut être consommé par une autre partie de l'application.

Consommer un Webhook dans Symfony

Après avoir défini un Webhook, vous pouvez le consommer avec un gestionnaire d'événements comme suit :

webhook

Access Token simplifié

Symfony 7 facilite l’intégration des APIs sécurisées avec des jetons d’accès. L’introduction d’un authentificateur natif pour les jetons d’accès simplifie leur gestion et leur utilisation dans les applications.

Le composant Clock

Le composant Clock permet d’abstraire la gestion du temps lors des tests. Il offre différentes options, comme MockClock pour simuler une fausse horloge et MonotonicClock pour des analyses de performances plus précises.

Sylius V2, en combinaison avec Symfony 7, représente un véritable tournant pour les développeurs. Non seulement la compatibilité avec Symfony 7 améliore la performance, mais elle facilite aussi le développement avec un code plus simple et plus modulaire. L’adoption des meilleures pratiques et l’intégration des nouveautés de Symfony 7 assurent une base solide pour la création d’applications robustes et évolutives. Cette mise à jour est un pas de plus vers un écosystème plus performant et maintenable.