Le temps des retrouvailles. Tel aurait pu être l’autre nom de ce Forum PHP 2022 ! Et oui après 2 éditions en ligne, c’est en physique que cette 21ème édition s’est tenue à Paris les 21 et 22 octobre dernier. Dedi était, cette année encore, Sponsor de l’évènement. Et nous, team dev chez Dedi, nous y étions ?
Retour d’expérience sur ces 2 jours et résumé de 7 conférences du Forum PHP 2021.
Vers la sobriété numérique – François ZANINOTTO
Dans cette conférence, François tire avec humour un tableau d’un numérique qui ne cesse d’être énergivore au point de dépasser dans quelques années les taux de rejet de CO2 du transport mondial. Devant ce futur peu enviable pour la prochaine génération, où développeuses et développeurs ne sauraient pas gérer cette transition de sobriété numérique, François ne se soustrait pas et nous livre quelques clés pour avancer dans le bon sens. Dans un premier temps, François cible la source la plus polluante de nos sites internet qui est le front (la partie visible à l’écran). Que cela soit l’écran allumé pour afficher un site internet, l’architecture ou le langage utilisé, il nous livre un panel de conseils qui peuvent être mis en place pour limiter l’impact écologique de nos applications web :
- Limiter les médias lourds comme les vidéos ou les images animées qui demandent plus de bande passante.
- Eviter les traqueurs (publicités ou autres), toujours plus nombreux, qui surchargent en requêtes la page.
- Revoir le design des pages pour éviter les animations ou autres ombres qui demandent plus de calculs d’affichage par le navigateur.
- Ou tout simplement permettre à un utilisateur d’accéder rapidement aux fonctionnalités dont il a vraiment besoin et ainsi le libérer plus rapidement, économisant du temps d’écran.
Si ces pistes d’amélioration peuvent aider, François va plus loin avec des notions plus radicales :
- Travailler sur la rétrocompatibilité des anciens appareils (voire très anciens) et ainsi éviter le phénomène de rachat de nouveaux appareils
- Eviter l’utilisation de langage dynamique tel que Javascript (du moins le plus possible) et favoriser le HTML / CSS.
- Réduire les appels serveurs un maximum ou déléguer les traitements lourds aux serveurs bien souvent optimisés en consommation d’énergie et rejet de CO2.
- Ou carrément opter pour une vision « hors ligne » de nos applications web quand cela est possible.
Enfin, pour nous aider, François nous propose un outil de mesure des émissions en CO2 d’un site internet développé par Marmelab : https://greenframe.io/. S’il ne fallait retenir qu’une chose pour qu’une nouvelle fonctionnalité soit verte: si vous n’en avez pas vraiment besoin, ne la faites tout simplement pas !
Transformer une application CRUD vers du DDD, pas à pas – Charles DESNEUF
Il existe des librairies bien pratiques qui permettent, avec peu d’effort, de créer rapidement des CRUD avec interfaces d’administration, comme ce que propose Symfony EasyAdmin. Mais que faire lorsqu’une application devient trop spécifique pour un simple CRUD ? C’est à ce problème que Charles répond dans sa conférence en l’illustrant d’un retour d’expérience. Pour ce faire, Charles nous propose une méthodologie de transition CRUD vers une vision plus métier avec le Domain Driven Design.
Dans un premier temps, il propose d’organiser un « Event Storming » avec l’équipe de production et le porteur du projet dont l’objectif est de définir ensemble le lexique et les cas d’usage de l’application. S’ensuit un état des lieux du code pour permettre de détecter les règles métier qui pourraient se cacher dans des annotations de validateurs ou dans des événements branchés sur le cycle de vie du framework Symfony. Ensuite, avant de passer à la phase de refonte, Charles nous initie à l’utilisation des tests qui auront pour objectif de survivre après la refonte d’une portion de code, que cela soit des tests de fonctionnalité (avec Behat, Cypress …) ou encore des « Approval tests » qui permettent de garantir que le résultat avant et après soit toujours le même. Pour finir, on peut passer à la refonte du code en elle-même, mais pas n’importe comment ! En effet, Charles nous donne une fois de plus de bons conseils de refonte :
- L’encapsulation de règles métier avec le lexique du produit dans des classes dédiées respectant des interfaces garantissant la vision métier.
- L’utilisation de Value Object pour regrouper des notions liées et ainsi éviter l’enchainement de setter qui n’ont que peu de sens pour le métier.
Il nous donne également une bonne technique pour palier le souci des entités Doctrine difficiles à transformer en vision DDD avec l’utilisation du modèle CQRS (Command Query Responsibility Segregation). Dans son exemple, cela permet de découper. On découpe une table de données en plusieurs petites tables, auxquelles on peut interfacer des entités d’écriture métier. On crée ensuite une vue agrégeant les différentes tables. Ainsi, on ne casse pas l’interfaçage avec l’entité historique, qui devient simplement une entité d’affichage Malin et élégant !
L’architecture ESA : le futur des API web – Kévin DUNGLAS
ESA est une nouvelle architecture, à l’approche novatrice, qui permet de créer des API plus fiables, plus performantes et moins énergivores. Lors de cette conférence, Kévin Dunglas nous expose différents moyens d’optimiser les APIs web, le tout en utilisant plusieurs outils web comme les CDN. Les CDN peuvent être utilisés pour « soulager » le serveur web grâce à leurs caches. Ces caches retourneront la ressource demandée, si celle-ci n’est pas considérée comme trop ancienne. Kévin nous présente également différentes façons de générer nos pages web :
- Pour des pages avec du HTML qui ne bouge pas souvent (des pages CMS par exemple), on peut utiliser le principe du Static Site Generation (SSG). On génère TOUTES ces pages à l’avance, pour envoyer leur contenu au CDN. A chaque demande de ces pages, c’est le CDN qui va retourner la page mise en cache, évitant ainsi au serveur d’effectuer le traitement de la page
- Similaire au SSG, l’Incremental Static Regenration (ISR) : lors de la visite d’une page, le serveur effectue le traitement, affiche la page, et l’envoie également au CDN qui va venir la mettre en cache. Ainsi, aux prochaines visites sur cette page, c’est le CDN qui va la retourner via son cache, et non le serveur.
Synchroniser ses applications plus rapidement avec du low-code – Grégory PLANCHAT
Voilà une conférence qui nous a particulièrement parlée chez Dedi ? car elle répond, entre autres, à un besoin que tout e-commerçant rencontre à un moment donné : comment synchroniser les différents services, avec leurs différentes façons de dialoguer, à son site e-commerce ?
Au travers de sa montée en compétence sur les sujets de flux entre services, Grégory nous présente comment, lui et son équipe, ont fini par développer un ETL (Extract-transform-load) complet permettant de répondre à toute la complexité que de tels échanges peuvent engendrer alors qu’il pensait naïvement que la tâche serait aisée. Du nom de Gyroscops (https://php-etl.Github.io/documentation/), leur outil permet la récupération, la transformation et la restitution de données entre services, que cela soit sous forme de fichier à plat, CSV, API ou échanges FTP, le tout avec gestion des erreurs et relance le cas échéant. A date, Gyroscops embarque un bon nombre de fonctionnalités et de connecteurs, dont les deux qui ont attiré notre attention : Sylius et Akeneo. Le tout sous licence Open-source, donnant toutes les clés aux e-commerçants pour brancher leur Sylius avec leur PIM préféré.
Lire aussi | Sylius, la solution qui s’adapte à vos besoins e-commerce
Lire aussi | Le PIM, gestionnaire de vos informations produits
Enfin, cerise sur le gâteau, Grégory se paie le luxe de nous présenter un aperçu d’une version « low-code » de son ETL, à base de blocs à glisser-déposer et de liens à connecter entre eux.
WorkAdventure de la genèse à aujourd’hui : Retour d’expérience sur 1 an d’univers virtuels – David NÉGRIER
WorkAdventure est un outil ludique, proche d’un mini jeu vidéo, qui vous permet de recréer un espace de travail virtuel. C’est sur cette plateforme qu’avait eu lieu l’édition virtuelle du Forum PHP 2020. Utilisant le moteur graphique Phaser, WorkAdventure propose une carte sur laquelle les utilisateurs peuvent se créer un personnage et discuter via un chat vidéo intégré dans la plateforme.
David nous a montré comment il est passé d’un mini jeu, à une plateforme pouvant accueillir plusieurs dizaines de milliers d’utilisateurs simultanément. Il nous a raconté tout le chemin parcouru par WorkAdventure, depuis son premier prototype jusqu’au jeu complet qui s’enrichit de jour en jour grâce à une communauté active et croissante (ajout de fonctionnalités, de cartes et autres). Au départ, le jeu connectait directement deux navigateurs entre eux. Mais au fil du temps, le jeu a pris de l’ampleur et les limitations techniques de ces échanges Peer to Peer se sont fait ressentir. David a donc dû utiliser différents types de serveurs (STUN, TURN, SFW) pour assurer une compatibilité maximale entre tous les navigateurs.
Advanced Git Magic – Pauline VOS
Présentée par Pauline Vos, cette conférence présente plusieurs commandes pour maîtriser l’historique de son dépôt Git. Dans un premier temps, Pauline nous a parlé de la commande Rebase en mode interactif qui nous permet de réorganiser et d’appliquer des modifications sur l’historique des commits. Pour l’utiliser, il convient de préciser un numéro de commit de départ ; tous les commits depuis ce commit et notre HEAD courant pourront être modifiés git rebase -i <ref>. Utile lorsqu’un changement non versionné concerne un précédent commit ou lorsque l’on souhaite réorganiser l’ordre de ses commits ! De multiples actions sont possibles : reformuler le message d’un commit, le fusionner avec le commit précédent, etc.
Pauline nous a aussi présenté la commande Git bisect qui permet de chercher un commit par dichotomie, utile pour trouver un changement qui introduit un bug. Cette commande s’utilise en précisant un commit de départ et un commit d’arrivée. Git va ensuite nous placer sur un premier commit entre les deux précisés précédemment. Il convient alors de communiquer à Git si le commit est « bon” ou « mauvais ». Cette opération est répétée jusqu’à trouver le commit fautif. Pour que la recherche fonctionne de manière optimale, il faut que les commits soient atomiques. Pour cela, les trois règles suivantes doivent être respectées :
- Le commit doit être irréductible (chaque commit contient un seul fix ou feature)
- Tout doit fonctionner (le commit ne doit pas casser l’application)
- Le commit est clair et concis (le message et la description définissent un objectif clair)
Finalement, la conférence s’est finie avec une présentation de Git bisect en mode automatique. Git est alors capable de déterminer seul si un commit est « bon » ou « mauvais ». Pour cela, il convient d’utiliser une commande qui sera exécutée à chaque changement de commit. Le retour de cette commande est utilisé pour déterminer le résultat du commit. Ainsi, on peut exécuter de manière automatique des tests automatisés pour retrouver un commit fautif. Pour en savoir plus : https://www.pauline-vos.nl/fix-bugs-⚡-fast-with-regression-tests-and-auto-bisect/
Fiber : la porte ouverte sur l’asynchrone – Benoît VIGUIER
PHP 8.1 introduit une nouvelle fonctionnalité : les Fibers. Benoît Viguier nous présente comment exécuter du code asynchrone grâce à cette nouveauté. Un objet Fiber met à disposition plusieurs méthodes pour démarrer, suspendre et reprendre la fonction avec laquelle il a été construit. Fiber est donc, pour faire simple, une API qui permet de rendre une fonction interruptible.
Le langage PHP étant « single threaded » il est impossible d’exécuter plusieurs fonctions en même temps. Fiber propose plutôt un moyen de démarrer, d’arrêter et de reprendre des processus. Exemple : l’optimisation du temps lorsqu’on attend la réponse d’une API externe ; en effet, l’API Fiber permet de ne pas bloquer le code au moment d’attendre une réponse. Il est à noter que c’est les fonctions elles-mêmes qui s’auto-interrompent, encore une fois,. C’est dû à la nature « single threaded » de PHP. De plus, il convient d’avoir une « event loop » qui orchestre les Fiber à exécuter. Pour ça Revolt PHP propose une implémentation disponible sur GitHub https://Github.com/revoltphp/event-loop. Pour conclure, Fiber propose un concept intéressant qui permet d’exécuter du code PHP de manière asynchrone. PHP étant « single threaded », il ne s’agit donc pas d’exécuter plusieurs lignes de code en même temps.
Clôture du Forum PHP 2021
Ces 2 journées de conférences, discussions et retrouvailles se terminent. Quelle édition ! Partage et convivialité auront été les maîtres-mots. L’AFUP l’avait promis, l’AFUP l’a fait. Un grand merci à toute l’équipe de bénévoles pour l’organisation formidable et la bonne ambiance.
La Dedi team est heureuse d’avoir participé à ce salon en tant que sponsor et visiteur, et vous donne RDV l’année prochaine pour le Forum PHP 2022 !
Envie de papoter tech avec l’équipe ?