Présente :
COQUARD Cyrille
06/10/2023
PHP Moderne dans WordPress
COQUARD Cyrille
06/10/2023
Introduction
COQUARD Cyrille
06/10/2023
Qui suis je?
COQUARD Cyrille
06/10/2023
Ingénieur logiciel
COQUARD Cyrille
- WP Rocket
- Imagify
06/10/2023
Volonté de s'améliorer
COQUARD Cyrille
06/10/2023
- Difficulté à trouver des resources
- Difficulté trouver des exemples concrets
Ressources approfondies
Idée derrière le talk
COQUARD Cyrille
06/10/2023
- Une veille concentrée
- Approndissement notions
Education
- Bonnes pratiques
- Fur et à mesure:
- Plus simple
- Moins prenant
06/10/2023
COQUARD Cyrille
- Déploiemement millions de sites
- Peu de retour clients:
- Pas de limite de temps
- Équipe d'environ 20 personnes
Resultats
06/10/2023
COQUARD Cyrille
Sommaire:
- L'histoire de WP Rocket
- Architecture
- Qualité du code
Introduction
06/10/2023
COQUARD Cyrille
L'Histoire de
WP Rocket
COQUARD Cyrille
06/10/2023
COQUARD Cyrille
WP Rocket
Plugin de cache et de performance
06/10/2023
Aussi simple que possible
Oui mais
COQUARD Cyrille
WP Rocket
Avril 2013
Le commencement
V0
Juillet 2013
Le plugin
V1
- Tutoriel
- Fichier zip
- Pas de plugin
- Plugin
- Procédural
06/10/2023
COQUARD Cyrille
WP Rocket
Décembre 2013
Les prémises
V2
- Git
- Objet
2018
La révélation
V3
- Archi par feature
- Tests
- Protection des dépendances
06/10/2023
COQUARD Cyrille
WP Rocket
06/10/2023
Besoin de diviser la v3
2018
v3.1 - Ajout event manager
Problème
06/10/2023
- Répétiton logique de l'enregistrement
- Simuler enregistrement des hooks chaque test
- Couplé fortement à l'API WordPress
WP Rocket
COQUARD Cyrille
06/10/2023
WP Rocket
COQUARD Cyrille
- Subscriber contient la logique business
- Subscriber envoie événements
- Event Manager enregistre les événements
06/10/2023
WP Rocket
COQUARD Cyrille
Event manager
06/10/2023
- Ne pas répéter la logique l'enregistrement des hooks
- Externaliser l'enregistrement des hooks
- Faciliter les tests
WP Rocket
COQUARD Cyrille
COQUARD Cyrille
WP Rocket
06/10/2023
Besoin de diviser la v3
2018
v3.1 - Ajout event manager
Composer autoload - v3.5.1
2018
Composer
- Gestion automatique des dépendances
- Autoloading
- Sortir les dépendences de git:
- Plus clair
- Réduit les conflits
06/10/2023
COQUARD Cyrille
COQUARD Cyrille
WP Rocket
06/10/2023
Besoin de diviser la v3
2018
v3.1 - Ajout event manager
Composer autoload - v3.5.1
2020
v3.6 - Ajout League container
2018
Problème
06/10/2023
Lier les classes entre elles
WP Rocket
Lier les classes dans les constructeurs
Lier les classes dans le core
- Pas de conflit
- Difficile à tester
- Beaucoup de conflits
- Facile à tester
COQUARD Cyrille
WP Rocket
06/10/2023
Injection de dépendances
- Utilisation container instantiation
- Création arbre dépendances
- Division liaison entre les classes
COQUARD Cyrille
Injection de dépendances
06/10/2023
- Réduire le coupling core / feature
- Rend le code réutilisable
- Réduit les conflits
WP Rocket
COQUARD Cyrille
COQUARD Cyrille
WP Rocket
06/10/2023
Besoin de diviser la v3
2018
v3.1 - Ajout event manager
Composer autoload - v3.5.1
2020
v3.6 - Ajout League container
Protection dépendances - v3.7
2020
2018
Mozart
Problème:
Conflit avec des dépendances d'un autre plugin
06/10/2023
Solution:
Ajouter un namespace avant celui de la librarie
COQUARD Cyrille
COQUARD Cyrille
WP Rocket
06/10/2023
Besoin de diviser la v3
2018
v3.1 - Ajout event manager
Composer autoload - v3.5.1
2020
v3.6 - Ajout League container
Protection dépendances - v3.7
2020
2018
2022
v3.11 - BerlinDB et AS
WP Rocket
La database
- $wpdb est global
- Pas de gestion des tables
- Requêtes dans la logique business
Problèmes de la méthode actuelle
06/10/2023
COQUARD Cyrille
WP Rocket
La database
Berlindb
Query: Interagir avec les data
Table: Gestion de la table
06/10/2023
COQUARD Cyrille
WP Rocket
Problème
Preload
Sites avec milliers de pages:
- Limite temps d'exécution
- Monopolisation ressources
06/10/2023
COQUARD Cyrille
WP Rocket
Solution
Action Scheduler
-
Permet un contrôle des opérations:
- Exécution asynchrone
- Exécution par batch
06/10/2023
COQUARD Cyrille
Architecture
COQUARD Cyrille
06/10/2023
Architecture
Vue de dessus
06/10/2023
COQUARD Cyrille
Architecture
Le core
- Chargement du plugin
- Chargement des libraires
- Enregistrement des évènements
- Mise en place l'injection des dépendances
06/10/2023
COQUARD Cyrille
Architecture
06/10/2023
COQUARD Cyrille
Architecture
Une organisation par feature
- Subscriber
- Service Provider
- Table
- Queue
06/10/2023
COQUARD Cyrille
Architecture
Avantages
- Découplage entre les features
- Une seule source de vérité
- Code simple
06/10/2023
COQUARD Cyrille
Architecture
06/10/2023
- Faire intéragir deux features découplés
- Garder le code extensible
Problèmes:
COQUARD Cyrille
Architecture
Solution:
Évènements (Actions + Filtres)
Toujours penser le plugin comme extensible par l'intermédiaire d'actions et de filtres
06/10/2023
COQUARD Cyrille
Architecture
Constantes magiques:
- Donner une valeur par default
- Ne pas imposer son choix
06/10/2023
Contrôler le flux des données:
- Configuration par l'utilisateur
- Adaptation de la logique
Filtres
COQUARD Cyrille
Architecture
Signaler un évènement:
- Faciliter la compatiblité
06/10/2023
Déléguer:
- Nettoyer la logique
- Faciliter la modification
Actions
COQUARD Cyrille
Qualité du code
COQUARD Cyrille
06/10/2023
Linter
PHPCS
Problème:
Plusieurs dev ont forcement des pratiques differentes
06/10/2023
Solution:
Linter qui met le code en forme de facon standardisé
COQUARD Cyrille
Pourquoi tester?
06/10/2023
Tester c'est douter
- Garder une connaissance des spécifications
- Voir rapidement un défault
- Automatiser les tâches ennuyantes
COQUARD Cyrille
Les types de tests
Unitaire
06/10/2023
S'assure que chaque classe fonctionne correctement
Intégration
S'assure que le système fonctionne correctement
End to end
S'assure à un niveau utilisateur que le sytème fonctionne correctement
COQUARD Cyrille
TDD
C'est quoi?
06/10/2023
Créer les tests avant le code.
Test Driven Development
Avantages:
- Un dévelopeur pour faire code + test
- Tests valides
- Coùt faible d'une erreur
COQUARD Cyrille
TDD
C'est quoi?
06/10/2023
COQUARD Cyrille
Fixtures
C'est quoi?
06/10/2023
Problèmes:
- Beaucoup de tests similaires
- Difficile à maintenir
- Erreur facile
COQUARD Cyrille
Fixtures
C'est quoi?
06/10/2023
Fonctionnement:
- Créer des scénarios
- Créer un test commun
- Injecter les données
COQUARD Cyrille
Fixtures
C'est quoi?
06/10/2023
Fixture:
- Un seul test à maintenir
- Facile d'ajouter un nouveau test
- Maintenable
COQUARD Cyrille
Methode de tests pour l'agence
COQUARD Cyrille
Problèmes:
- Le temps c'est de l'argent
- Preuves rapides
- Besoin de tests solides
- Implication moindre
06/10/2023
Methode de tests pour l'agence
COQUARD Cyrille
Compromis:
- TDD
- Tests d'intégrations
- Fixtures
06/10/2023
Launchpad
Framework regroupant toutes les bonnes pratiques de WP Rocket
https://github.com/wp-launchpad/launchpad
COQUARD Cyrille
06/10/2023
Avez-vous des Questions?
06/10/2023
COQUARD Cyrille
PHP bonne pratiques
By Cyrille Coquard
PHP bonne pratiques
- 711