Principales leçons apprises lors de l'optimisation de WordPress (pour le succès des clients)

Publié: 2022-09-15
Masquer la table des matières
1. Qu'est-ce qui m'a encouragé à parler au WordCamp Mumbai ?
2. Les trois problèmes qui m'ont donné des nuits blanches (avec des solutions et des leçons apprises d'eux)
2.1. Réduire le temps de chargement des pages de 3 minutes à quelques millisecondes…
2.1.1. Problème
2.1.2. La solution
2.1.3. Améliorer la solution
2.2. Comment une erreur de timeout est-elle devenue la fonctionnalité la plus vendue de notre plugin ?
2.2.1. Problème
2.2.2. La solution
2.2.3. Améliorer la solution
2.3. Comment les environnements d'hébergement partagé nous ont-ils obligés à réécrire notre plugin ?
2.3.1. Problème
2.3.2. La solution
3. Résumé des leçons
4. Quel est votre choix ?

À quand remonte la dernière fois que vous avez eu un nuage neuf moment?

Passer l'école avec brio.. ou quand votre petite amie / petit ami a accepté votre demande en mariage ?

J'ai eu un moment de nuage neuf il y a deux semaines ! Je parlais au WordCamp Mumbai 2017 - le plus grand WordCamp de l'Inde.

Le sujet était quelque chose qui me tenait à cœur et que je traite tous les jours - les leçons apprises en optimisant WordPress pour le succès des clients.

Il s'agit des problèmes que j'ai rencontrés avec de grandes bases de données WordPress et de la façon dont je les ai abordés.

Qu'est-ce qui m'a encouragé à parler au WordCamp Mumbai ?

Développer un plugin WordPress est une excellente expérience d'apprentissage. Vous pouvez étendre un cadre superbe, vous concentrer sur l'écriture de code qui résout les problèmes des clients et travailler avec des membres d'équipe formidables.

Chez StoreApps, les développeurs écrivent non seulement du code, mais assistent également les clients. La résolution des requêtes des clients m'a donné certaines des plus grandes leçons.

Donc tout ça, c'est mon quotidien, et c'est assez excitant.

Mais savez-vous ce qui est le plus excitant pour moi ? Travailler avec de grandes bases de données et résoudre des problèmes de bases de données complexes !

Nos plugins sont utilisés par plus de 35000 utilisateurs. Et j'ai vu beaucoup de défis travailler avec de grands magasins WooCommerce et des sites WordPress populaires.

Heureusement, j'ai pu résoudre ces défis et j'ai beaucoup appris.

Mais attendez, tout comme moi, il y aurait des centaines d'autres développeurs confrontés à des problèmes similaires en travaillant avec WordPress et WooCommerce.

J'ai donc décidé de partager mes leçons avec d'autres.

Et quelle meilleure plate-forme qu'une opportunité de parler au plus grand WordCamp de l'Inde !

Les trois problèmes qui m'ont donné des nuits blanches (avec des solutions et des leçons apprises d'eux)

Enfin, voici les trois problèmes dont je parlais. Alors commençons par eux un par un.

Réduire le temps de chargement des pages de 3 minutes à quelques millisecondes…

Problème

J'ai fait face à une situation avec le plugin Smart Coupons dans laquelle une simple fonctionnalité d'affichage des coupons sur les pages cruciales du magasin (c'est-à-dire les pages panier, paiement et mon compte) a bloqué le processus de paiement.

Smart Coupons est un plugin pour la création et la gestion de coupons et de chèques-cadeaux en masse pour une boutique WooCommerce.

La solution

Désormais, l'utilisation de WP Query aurait entraîné plusieurs JOIN , car l'affichage des coupons disponibles pour un utilisateur spécifique nécessite l'évaluation de plusieurs méta-conditions.

Ainsi, au lieu d'utiliser le moyen idéal d'interroger la base de données, c'est-à-dire WP Query, j'ai écrit des requêtes SQL personnalisées .

Optimiser WordPress
Coupons intelligents Ancien code

Aussi, dans les requêtes personnalisées, ce que j'ai fait était:

  • Au lieu de vérifier toutes les conditions méta dans une seule requête MySQL, j'ai simplement évalué la première condition méta
  • Après cela, j'ai stocké la liste séparée par des virgules des post_ids (identifiants de coupon) dans la table des options
  • Et puis, je mappe simplement le même ensemble de post_ids en évaluant chacune des autres conditions méta

Ce que j'ai fait jusqu'à ce que j'obtienne un ensemble final de post_ids qui devaient être affichés pour l'utilisateur spécifique.

Optimiser WordPress
Coupons intelligents Nouveau code

Améliorer la solution

Cela a résolu les problèmes de chargement de page. Cependant, pour obtenir le chargement de la page en quelques millisecondes, comme suggéré par notre ami, j'ai dû redéfinir le problème.

Au lieu d'afficher tous les coupons auxquels l'utilisateur a droit,
J'ai fixé une limite au nombre de coupons qui seraient affichés aux utilisateurs sur les pages de panier et de paiement.

Comment une erreur de timeout est-elle devenue la fonctionnalité la plus vendue de notre plugin ?

Problème

Pour le traitement d'une mise à jour de base de données très importante, j'avais écrit des requêtes personnalisées car l'utilisation des fonctions de base de WordPress pourrait devenir une surcharge énorme.

Exemple : Si quelqu'un doit réduire de 40 % les prix de tous les produits de son magasin, il lui suffit de sélectionner "Prix", "diminuer de 40 %" et d'appuyer sur le bouton de mise à jour. Ceci est facilement possible en utilisant notre plugin Smart Manager, conçu pour faciliter les mises à jour en masse sur vos boutiques WooCommerce.

Mais, le processus de mise à jour par lots a commencé à se bloquer et à donner des erreurs de délai d'attente chaque fois que quelqu'un essayait de mettre à jour 1k produits ou l'ensemble du magasin à la fois .

Au départ, j'ai commencé à chercher à optimiser les requêtes, mais cela n'a pas aidé.

Ma situation était similaire à celle d'un concurrent de Takeshi's Castle. Peu importe combien j'ai essayé, je n'arrêtais pas de tomber dans l'eau.

Optimiser WordPress

La solution

On dit qu'il faut parfois sortir du problème et le regarder à vol d'oiseau pour en trouver la cause exacte.

J'ai fait la même chose et j'ai compris que le vrai problème était
pas au niveau de la requête mais au niveau de la demande .

Donc, ce que j'ai fait, c'est qu'au lieu d'une seule requête faisant toutes les mises à jour, j'ai divisé la même chose en plusieurs appels AJAX successifs faisant un plus petit lot de mises à jour et qui ont complètement éliminé les erreurs de délai d'attente.

Optimiser WordPress
Demandes Ajax de mise à jour par lots de Smart Manager

Améliorer la solution

Désormais, cette approche consistant à décomposer une requête unique en plusieurs requêtes AJAX plus petites a non seulement résolu l'erreur de délai d'attente, mais a également amélioré la mise à jour par lots UX .

Maintenant, le gérant du magasin était informé de l'avancement de la mise à jour, ce qui augmentait simplement sa confiance dans le produit.

En outre, la même approche a permis à Smart Manager de gérer les mises à jour par lots pour les magasins WooCommerce de toutes formes et tailles et a fait de Smart Manager l'un des plugins les plus vendus de StoreApps.

Comment les environnements d'hébergement partagé nous ont-ils obligés à réécrire notre plugin ?

Problème

Pour tout plugin de création de rapports, il est très important de fournir des rapports non seulement précis mais rapides sur les statistiques. Désormais, l'obtention de statistiques de rapport nécessitait plusieurs requêtes impliquant la jonction de 2 principales tables WordPress, à savoir les publications et les postmeta.

Optimiser WordPress
Messages WordPress Postmeta ERD

Comme déjà vu plus haut, les JOIN sont si chers .

Dans Smart Reporter (notre solution de création de rapports pour WooCommerce), nous affichions 20 statistiques de rapport différentes sur une seule page et cela également lors du chargement de la page.

La solution

J'ai donc suivi la même approche que la plupart des solutions de reporting, qui consistait à créer un tableau récapitulatif, c'est-à-dire un tableau personnalisé à structure plate.

Ce tableau contiendrait un résumé de toutes les données requises par le plugin et éliminerait ainsi l'utilisation de jointures et améliorerait les temps de chargement des pages.

Optimiser WordPress
Tableau récapitulatif Smart Reporter

De plus, pour maintenir ces tableaux récapitulatifs à jour, nous avons utilisé des actions et des filtres WordPress.

Résumé des leçons

  • Suivez les meilleures pratiques autant que possible
  • Aucune requête en boucle
  • Éviter les grandes jointures complexes
  • Faites plus au niveau MySQL qu'au niveau PHP
  • Aller plus loin dans le code
  • Tables récapitulatives / personnalisées / temporaires
  • Attention à l’UX – réactivité, notifications…
  • Résolvez-vous le bon problème ?

Quel est votre choix ?

Je suis sûr que vous avez résolu d'énormes problèmes et que vous y avez trouvé des solutions. Faites-le nous savoir dans notre section commentaires ci-dessous. Ce serait vraiment précieux pour les lecteurs.