Tous les plugins WordPress ne sont pas optimisés (loin de là meme) et si vous avez un site à fort trafic ou un hébergement d’entrée de gamme, votre site WordPress peut devenir très lent, voire carrément meme planter si l’une de vos extensions est trop gourmande en écriture. On vous explique dans cet article comment identifier le fautif.
Des performances WordPress dégradées par des sauvegardes automatiques en base de donnée toutes les secondes
L’un de mes sites a un trafic d’environ 1,5 millions de pages vues par mois et malheureusement je traine encore dessus du code fait main datant de 2009. Si j’ai réussi à mettre presque tous mes bidouillages sous forme de plugins ou de fichier séparés, il n’est pas rare qu’en ouvrant un fichier je pousse un cri d’effroi en réalisant que j’avais codé une fonction avec les pieds.
Très récemment j’ai été alerté par un collègue que l’un de mes plugins déclenchait des sauvegardes en base de données toute les secondes via le hook save_post
et par ricochet des appels API vers un service externe. Seulement comment trouver le ou les fautifs de cette surcharge ?
Après quelques minutes de recherches manuelles infructueuses, je me suis dit que je gagnerais beaucoup de temps avec quelques lignes de code.
La création, la mise à jour et la suppression de meta données déclenchent le hook save_post
Comme le nombre de nouveaux articles publiés sur ce site par jour est assez modeste, la seule raison de déclencher le hook save_post
était de créer, modifier ou supprimer des meta données rangées dans la table wp_postmeta
via les fonctions update_post_meta
et delete_post_meta
Après un petit tour sur la documentation WordPress, j’ai fini par trouver les 3 actions que je pouvais hooker pour savoir exactement ce qu’il se passait en base de donnée :
added_post_meta
updated_post_meta
- et
deleted_post_meta
Etant trop feignant pour coder un vrai plugin, je me suis contenté de créer un petit fichier nommé functions-log-metadata.php
inclus depuis le fichier functions.php
de mon thème en y ajoutant via la ligne suivante :
include ('functions-log-metadata.php');
Code PHP pour logger tous les déclenchement d’écriture de meta données dans WordPress
Voici le contenu du fichier en question :