Retour sur le Forum PHP 2023 - Jour 2
Publié le 17 octobre 2023
Après avoir publié hier le compte-rendu du premier jour du Forum PHP 2023, découvrons ensemble le second jour des conférences !
Index Wars: le pouvoir des Jedi des Index dans l'univers de Postgres
À travers des slides amusantes représentant l’univers Star Wars Lego, Lætitia Avrot, experte PostgreSQL chez EnterpriseDB, nous a parlé des indexes PostgreSQL, comment les optimiser et les erreurs à éviter.
Il n’est pas toujours nécessaire de créer un index, ou de le créer dans le bon ordre et avec le bon type (B-tree
, Hash
, BRIN
, GIN
, GiST
, SP-GiST
). Par ailleurs, l’index sera utilisé ou non selon la requête SELECT
exécutée. Combiner plusieurs indexes est tout à fait possible, cependant les performances se dégradent dès lors que la requête est ordonnée. La création d’un index peut également être sur une clause WHERE
voire ORDER
, permettant d’optimiser les performances de certaines requêtes.
Au-delà des opérateurs standards, PostgreSQL en ajoute plusieurs assez puissants permettant de comparer des valeurs selon différents critères : expressions régulières, insensibilité à la casse, opérateurs “piou piou”, etc.
PostgreSQL est un langage extensible, il est donc possible de créer des extensions sur-mesure pour faire tout ou n’importe quoi… comme comparer des chiwawas avec des muffins ! Pour assurer sa maintenance, PostgreSQL propose et utilise plusieurs fonctions (ANALYZE
, VACUUM
, EXPLAIN
, etc.). Il est important de vérifier la taille des indexes (e.g. : pg_stat_all_indexes
) pour s’assurer de leur utilité et de leur bonne configuration. Des expert·es PostgreSQL ont par ailleurs publié plusieurs scripts très utiles avec PostgreSQL : https://github.com/pgexperts/pgx_scripts. Enfin, Use the index, Luke! est une ressource à dévorer sur la connaissance des indexes et de SQL en général.
Compte rendu rédigé par Vincent.
Changements de comportements en PHP 8
Damien Seguy, un habitué de l’AFUP et du Forum PHP, nous présente des changements dans PHP 8. Changements documentés et attendus, mais également les changements non attendus ou les comportements non appréhendés. Enfin les bugs potentiels qui apparaissent avec les nouvelles versions. Voici ce que nous retenons :
- Attention à l’ordre des arguments dans
implode()
. - Attention aux entiers en 2eme arguments de
strpos()
. - Pour certains gros changements, PHP prévoit une période de transition via des dépréciations et des warnings.
- Pour les questions ternaires / opérations / concaténation, pensez à entourer votre code de parenthèses pour éviter les mauvaises surprises.
match()
est désormais un mot réservémax()
etmin()
n’acceptent plus les tableaux vides.
Plus d'infos sur https://github.com/dseguy/changedBehavior.
Compte rendu rédigé par Clément.
La mutabilité m’a tué, l’immutabilité m’a sauvé
Sadetdin Eyili collectionne des canards et a une voiture qui s’appelle Yvan. En dehors de ça, il étudie la mutabilité des objets… et leur immutabilité depuis un projet réel. Depuis une classe représentant un événement, il nous a montré comment créer ce code immuable grâce à une commande intermédiaire.
Se posent alors des problèmes de référence et d’utilisation de PHP. Pour corriger cela, les clones PHP peuvent être une bonne solution. Mais le problème est probablement plus profond, et la solution l’est aussi : utiliser de l’immutabilité autant que possible ! Par exemple, utiliser DateTimeImmutable plutôt que DateTime. Dans la plupart des cas, l’utilisation des propriétés en lecture seule (readonly) simule une forme d’immutabilité sur la plupart des propriétés. Une autre alternative est l’utilisation de withers (au lieu de setters), retournant une nouvelle instance de l’objet courant avec la valeur mise à jour.
En résumé :
- Les objets immuables doivent avoir des propriétés immuables
- Tous les objets sont muables (même
DateTimeImmutable
), car il est possible d’appeler le constructeur après création de l’objet; il est alors préférable de déclarer des constructeurs privés
Compte rendu rédigé par Vincent.
PHP en serverless, comment ça marche sous le capot ?
Mathieu Napoli nous montre comment déployer facilement une application PHP sur Lambda, et comment ces instances fonctionnent (régions, datacenter, requêtes HTTP). Il présente aussi la technologie Firecracker, développée par AWS pour gérer la mutualisation de leurs serveurs EC2.
Les temps de démarrage à froid sont de l’ordre de 200 à 300 ms. Chaque requête s'exécute sur une instance différente, donc 1 ou 1000 requêtes simultanées, chaque environnement est identique. Entre chaque requête l’instance est mise en sommeil, donc zéro coût entre chaque appel.
En bref, sans mauvais jeu de mot, le serverless peut correctement correspondre à des projets qui ont des besoins de scalabilité sans la complexité GCP/K8S etc.
Compte rendu rédigé par Clément.
PhpStorm = <3
Charles Desneuf nous a parlé de son IDE de cœur : PhpStorm. En prenant comme base la refactorisation d'un fichier de test, il nous a présenté la puissance des live templates. Afin d’optimiser son refactoring, il explique sa méthode de la vague (ou du tapis) permettant de faire pour mieux défaire. Il abordera par exemple l’extraction de variables, la génération de méthodes et plus encore.
Les live templates de PhpStorm de leur côté, lui permettent en quelques tabulations de générer son code intelligemment et à une vitesse folle (et sans fautes de frappes 😅). Que ce soit via la complétion intelligente ou les regex, l’outil permet de customiser et d’adapter son fonctionnement à notre manière de travailler afin de la rendre plus efficace.
Il conclura par une présentation de l’IA intégrée à l’IDE et nous confiera la voir évoluer au fur et à mesure de ses répétitions pour le talk et être vraiment impressionné par sa précision.
Compte rendu rédigé par Justine.
Webperf : boostez vos apps PHP avec le code de statut HTTP 103 Early Hints
Notre coopérateur Kévin est monté sur scène pour parler du code HTTP 103 (Early Hints). L’un des problèmes du Web et des requêtes HTTP actuellement sur nos applications PHP est qu’on attend la réponse du serveur pour télécharger nos ressources (JavaScriptCSSimages
). On perd du temps et c'est chronophage.
L’intérêt du code 103 (valable à partir de HTTP/2) permet de renvoyer des informations rapidement à notre client pour lui dire “télécharge déjà les CSS/JavaScript qui seront nécessaires pour la réponse qui arrive”, avec à la clef un gain de performance conséquent. Même si Safari et Firefox ne le supportent pas encore par défaut, les envoyer doit être une bonne pratique à généraliser car les codes 103 seront simplement ignorés par les navigateurs qui ne le supportent pas.
PHP-FPM ne le supporte pas (à cause du protocole FastCGI qui ne gère pas les multi-réponses). Pour l’instant il faut nécessairement FrankenPHP pour l’utiliser car écrit en GO et parle directement le HTTP comme protocole (pas de conversion en FastCGI).
Compte rendu rédigé par Clément.
Open/Closed principle : on a dit étendre pas extends !
Sur les principes SOLID, Thomas Dutrion s’est concentré en particulier sur l’Open-Closed Principle. Ouvrir à l’extension n’est pas de l’héritage ! Aussi pratique que soit l’héritage, il pose plusieurs problèmes : casse le Single Responsability Principle et l’encapsulation, héritage technique, etc.
La composition entre alors en jeu pour étendre un objet sans passer par l’héritage. Thomas nous présente alors différents patrons de conception pour effectuer cette composition : décorateur, observer, handlers, callbacks. Couplés aux autres principes SOLID (notamment l’usage des interfaces), l’Open-Closed Principle est alors respecté.
Compte rendu rédigé par Vincent.
(Et si on apprenait à) Apprendre et partager autrement
Aurélie Vache est DevRel chez OVHCloud, et partage avec notre auditoire un sujet qui la passionne : partager, expliquer et aider les autres. Elle fait le constat suivant : on est tous différents mais notre apprentissage est le même. On oublie avec l'âge adulte ce qui fait de nous des personnes à part entière.
Enfant, ses passions étaient les legos et le dessin. En 2020, en plein confinement, elle a imaginé comment dessiner des pods… Ce petit dessin s’est transformé en ebook, puis 2, puis 3. Son livre numérique est devenu un livre papier. Ce dessin lui a donné l’opportunité de donner des talks, faire des keynotes. La petite fille mal dans sa peau est devenue conférencière. Rien n’aurait été possible sans des personnes bienveillantes et des communautés de devs autour d’elle.
Ses passions l’ont aidée professionnellement : elles ne sont pas un frein, elles nous épanouissent et nous démarquent. Elle conclura sa conférence en disant que sortir des conventions, c’est bénéfique pour tout le monde. Arrêtons de nous fixer des limites et de mettre les personnes dans des cases. Et quand on veut partager, on met l’égo de côté : il ne faut pas faire ça pour avoir des likes ou gagner des followers, mais pour aider les autres et faire le bien.
Compte rendu rédigé par Cécile.
You Build It, You Run it, l'observabilité pour les devs
Smaïne Milianni, développeur et formateur, vient, quelques semaines après sa participation à l’API Platform Conference, nous parler de build et d’observabilité.
Tout est amené à planter et mettre en place de l’observabilité va permettre de détecter les problèmes en amont. Pour ce faire : des logs, des metrics, des traces (auxquels Smaïne ajoute les alertes afin de savoir rapidement l'état de santé de notre application). Il préconise aussi d'écrire des post-mortem après les incidents pour tirer des leçons et éviter qu’ils se reproduisent.
L’anticipation est la clef : créer des dashboards, créer des alertes, etc...
Compte rendu rédigé par Clément.
Comment nous avons rendu API Platform compatible avec Laravel
Sujet fort attendu par la communauté Laravel présente sur place, la compatibilité d’API Platform avec Laravel. Antoine Bluchet, release manager d’API Platform nous présente d’abord l’installation en live du composant api-platform/laravel, sa démo qui termine sur l’interface OpenAPI et une API REST entièrement fonctionnelle sous Laravel.
Suite à cela, soyuka nous détaille le travail effectué pour rendre API Platform et Laravel compatibles à coups de Service Providers. En plus de la sortie d’API Platform 3.2, FrankenPHP est compatible avec Octane ce qui assure une sortie du composant dans un futur proche ! Il termine par une annonce de crowdfunding pour maintenir une version LTS (Long Term Stable) d’API Platform car la version 2.7 est désormais en EOL (End Of Life). Retrouvez ses présentations et les liens vers les différents travaux sur son blog. Le replay de sa conférence est désormais disponible :
Compte rendu rédigé par Clément.
Cap sur 2024
Encore une fois, nous avons pris plaisir à retrouver la communauté PHP pendant deux jours à Disneyland Paris. Nous avons eu énormément d'échange inspirants avec de futurs partenaires ou recrues et avons même eu l'opportunité d'être interviewés pendant la conférence. Comme d'habitude, les bénévoles et la salariée de l'AFUP ont mis les bouchées doubles pour nous offrir un événement de haute qualité, à l'ambiance bienveillante et familiale.
On regrettera peut-être la grande quantité de sujets non tech de programmés, mais connaissant les backstages de l'organisation de cet événement (de nombreux salarié·es de Les-Tilleuls.coop font du bénévolat au sein de l'AFUP depuis presque 10 ans), cette programmation est sûrement le reflet du CFP et des tendances actuelles en termes de conférences. Cela ne nous empêchera pas de revenir aux événements de cette association et ça tombe bien, l'appel à speakers de l'AFUP Day 2024 vient d'être lancé ! À bientôt et merci de nous avoir lus 😉