D'un point de vue client, Wordpress est un outil de création de site internet facile à utiliser.
D'un point de vue développeur, la mécanique de Worpdress est perfectible, il faut aussi faire attention aux nombre et à la qualité des plugins installés,
ceux ci pouvant rapidement entraîner une baisse des performances.
Le souci se produit sur 2 pages en particulier du site. La navigation depuis un navigateur vers l'une de ces pages affiche une erreur Gateway Timout 504.
La première chose à faire est de créer une version de préproduction pour faire les recherches de bugs sans perturber le site de production.
La page s'affiche finalement au bout de 55 secondes sur cet environnement, qui n'a pas la même limite de temps, le timout étant réglé à 30 secondes sur le serveur de production.
Cela permet d'utiliser des outils de profilage pour voir quelle portion du code impacte la rapidité de ces pages.
Après plusieurs recherches le module impacté est un outil lié au thème utilisé : Gantry plus spécialement dans la partie de traitement des images, celui ci lance quelques requêtes sql qui durent environ 10 à 15 secondes chacunes.
Les requêtes portant sur la table postmeta de Worpdress. Le nombre de modules et de champs personnalisés fait que cette table contient 9 millions d'enregistrements, ce qui devient important.
D'une manière générale, rajouter un module de cache front ne ferait que déplacer le problème, le souci devant être résolu en amont.
Il est lié au nombre important d'enregistrements de la table post_meta.
Il faut donc s'assurer que l'on puisse faire des requêtes sur cette table de façon efficace.
La requête en question :
SELECT SQL_NO_CACHE post_id, meta_value FROM ***_postmeta WHERE
meta_key = '_wp_attached_file' AND meta_value = 'xxx-400x400.jpg
Pour les pages concernées la recherche se faisait sur la colonne meta_value de la table postmeta, or cette table n'est par défaut pas optimisée au niveau des index sur un Wordpress.
La solution apportée dans ce cas : modifier les index de la table post_meta pour supporter une requête SQL avec un grand nombre de données sur ces colonnes.
Après intervention, la page prend moins d'une seconde à s'afficher.
CONTACTEZ-MOI POUR Résoudre votre souci
Florent BERNARD
Développeur Web Senior
06 77 70 86 16
contact@codeway.fr