Maison >interface Web >tutoriel CSS >WordPress Multi-multisite: une étude de cas
Le défi: Créer un tableau de bord d'administration WordPress pour afficher efficacement les données Google Analytics à partir d'environ 900 blogs répartis sur 25 instances multisites. La clé était de surmonter les obstacles de performance inhérents au traitement d'un ensemble de données aussi important.
Cet article détaille le processus de développement, mettant en évidence les décisions et les défis clés rencontrés. Nous explorerons l'API WordPress REST, le débat PHP contre JavaScript, les limitations de l'environnement de production, les considérations de sécurité, la conception de la base de données et même le rôle de l'IA.
Avant de plonger, clarifions certains termes:
La solution impliquait un seul plugin WordPress installé sur le site du tableau de bord et les 25 sites clients. Ce plugin a deux fonctions principales:
L'API WordPress REST était au cœur de ce projet. Son extensibilité a permis à la création de points de terminaison personnalisés d'exposer les données nécessaires.
Extrait de code: enregistrement des points de terminaison API
<?php [...] function register(\WP_REST_Server $server) { $endpoints = $this->get(); foreach ($endpoints as $endpoint_slug => $endpoint) { register_rest_route( $endpoint['namespace'], $endpoint['route'], $endpoint['args'] ); } } // ... (rest of the endpoint definitions) ...
Initialement, une approche basée sur PHP a été prise en compte. Cependant, le traitement synchrone PHP et les limites de temps d'exécution côté serveur rendent cela impraticable. Les capacités asynchrones de JavaScript offraient une solution supérieure, permettant la récupération concomitante de données de tous les sites.
L'implémentation JavaScript a considérablement réduit le temps de récupération des données: de 925 secondes estimées (synchrone) à environ 2 secondes (asynchrones). Cependant, les limites de demande de navigateur et de serveur ont nécessité un délai de 150 millierscondes entre les demandes.
Extrait de code: les données asynchrones récupérant
async function getBlogsDetails(blogs) { let promises = []; blogs.forEach((blog, index) => { // ... (code for delayed fetch requests) ... }); // ... (code for Promise.all and error handling) ... }
Les points de terminaison PHP et le code JavaScript ont été intégrés à l'aide de wp_localize_script()
, passant de manière transparente des URL de point de terminaison et d'autres données nécessaires au javascript.
La sécurité a été traitée via les mots de passe de l'application pour l'authentification de l'API et les en-têtes CORS (partage de ressources croisées) afin d'autoriser les demandes de domaine transversal du site du tableau de bord vers les sites clients. Le principe du moindre privilège a été suivi, restreignant l'accès aux COR uniquement aux points de terminaison nécessaires.
Extrait de code: implémentation de l'en-tête CORS
<?php [...] function register(\WP_REST_Server $server) { $endpoints = $this->get(); foreach ($endpoints as $endpoint_slug => $endpoint) { register_rest_route( $endpoint['namespace'], $endpoint['route'], $endpoint['args'] ); } } // ... (rest of the endpoint definitions) ...
Pour améliorer les performances, les données sont mises en cache dans une table de base de données personnalisée sur le site du tableau de bord, en utilisant un modèle de base de données relationnel. Le schéma de la base de données a été initialement conçu à l'aide de DocBlocks puis affiné avec l'aide d'un LLM.
Extrait de code: Création de table de base de données SQL
async function getBlogsDetails(blogs) { let promises = []; blogs.forEach((blog, index) => { // ... (code for delayed fetch requests) ... }); // ... (code for Promise.all and error handling) ... }
Le MVP est fonctionnel, fournissant des informations précieuses sur les modèles de trafic de blog. Les améliorations futures pourraient inclure l'utilisation d'un framework JavaScript moderne et explorer des solutions sans serveur comme AWS Lambda pour une évolutivité et des performances améliorées. L'utilisation de travaux cron pour la compilation de données préventives est également une amélioration potentielle.
Cet article donne un aperçu de haut niveau du processus de développement. Les défis et solutions spécifiques rencontrés offrent des informations précieuses aux développeurs travaillant avec des déploiements multi-multisites WordPress à grande échelle.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!