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