Chaque plug-in que vous ajoutez à votre site WordPress augmentera les temps d’exécution et les requêtes de base de données. Dans ce didacticiel, nous expliquons comment vérifier la provenance des temps d’exécution. Avec cette information, l’équipe d’assistance de WPML et vous-même pourrez trouver les goulots d’étranglement et améliorer les performances de votre site.

Installer et activer le plug-in Debug Objects

Nous utiliserons le plug-in Debug Objects pour voir et comprendre les requêtes de base de données nécessaires à l’exécution de votre site. Debug Objects affichera une ventilation détaillée des requêtes exécutées sur chaque page du site. Vous seul serez en mesure de consulter ce résultat une fois connecté en tant qu’administrateur. Les visiteurs ne seront pas en mesure de consulter les informations de débogage.

Pour installer le plug-in, accédez au tableau de bord de WordPress et choisissez Plug-in dans le menu de gauche, puis Ajouter. Dans le champ de recherche, saisissez « Debug Objects » et appuyez sur la touche Entrée.

Sur l’écran des résultats de recherche, cliquez sur le bouton Installer maintenant :

Installation du plug-in Debug Objects
Installation du plug-in Debug Objects

Une fois l’installation terminée, activez le plug-in.

Vous pouvez sinon télécharger Debug Objects directement depuis le référentiel WordPress et le transférer dans wp-content/plugins sur votre serveur. Ensuite, activez-le via la page Plug-in dans l’admin WordPress.

Désactiver Xdebug

Si vous ne savez pas en quoi consiste Xdebug, vous pouvez passer à la rubrique suivante. Si vous utilisez Xdebug, assurez-vous de le désactiver avant de procéder aux tests de performance. Xdebug provoquera une charge importante sur le serveur et tous les résultats seront faussés. Découvrez comment désactiver Xdebug.

Configurer Debug Objects pour analyser les requêtes SQL

Tout d’abord, ajoutez cette ligne à votre fichier wp-config.php (ce fichier se trouve dans le répertoire principal où votre WordPress est installé) :

define( 'SAVEQUERIES', TRUE );

Maintenant, accédez à Outils -> Debug Objects et désactivez toutes les options sauf DB Query :

Configuration de Debug Objects
Configuration de Debug Objects

Faites défiler vers le bas de l’écran et cliquez sur le bouton Enregistrer.

Vérifier le résultat de débogage

Après activation et configuration du plug-in, nous pouvons commencer le débogage. Lorsque vous êtes connecté en tant qu’administrateur WordPress, visitez une page sur laquelle vous trouvez que l’exécution de votre site est trop lente (si tel est le cas pour de nombreuses pages, choisissez celle qui semble être la plus lente), puis cliquez sur le lien Objects dans la barre de menu supérieure de la section admin :

Lien Debug Objects prêt à être utilisé
Lien Debug Objects prêt à être utilisé

Vous pourrez voir les trois onglets reprenant les informations de débogage :

Rendu de Debug Objects dans les trois onglets
Rendu de Debug Objects dans les trois onglets

Lire et comprendre les résultats de débogage

Ces trois tableaux renseignent une myriade de données, mais seule une partie de celles-ci est importante pour nous et pertinente pour le plug-in WPML. D’une manière générale, deux choses nous intéressent :

  • Les requêtes très lentes : la plupart des problèmes de performance sont parfois le résultat de quelques requêtes qui prennent beaucoup de temps à être traitées
  • Les nombreuses requêtes répétitives : d’autres fois, les requêtes ne sont pas très lentes, mais un grand nombre de requêtes rapides sont exécutées en même temps et prennent du temps à être traitées

Identifier les requêtes lentes

Accédez au premier onglet, appelé DB Queries et cherchez les requêtes les plus lentes. Le plug-in Debug Objects nous aide à le faire en mettant en évidence les requêtes prenant plus de 0,5 ms à être exécutées et en les encadrant d’une bordure orange :

Requêtes lentes
Requêtes lentes

Sous la chaîne Requête, vous pouvez voir le nom de la fonction qui a effectué la requête. Toutefois, cela peut toutefois être trompeur car cet onglet n’affiche que la dernière fonction de l’entièreté de la pile d’exécution, et nous ne savons pas si cela provient du noyau WordPress ou de l’un des plug-ins (ou de quel plug-in).

Vérifier si la requête vient du plug-in WPML

Copiez la requête lente (Ctrl + C) et sélectionnez le deuxième onglet, appelé Plugin DB Queries. Vous pouvez voir quelques tableaux renseignant des requêtes organisées selon les noms des plug-ins et des fichiers de plug-ins par lesquels sont passés les requêtes. Si le plug-in WPML a participé à l’exécution de cette requête, il doit être répertorié dans le tableau pertinent.

Appuyez sur Ctrl + F sur votre clavier, puis sur Ctrl + V pour coller la requête copiée.

Une recherche de toutes les occurrences de la requête sélectionnée dans ledit tableau sera alors lancée. Vous verrez probablement plus d’un résultat. Pour passer de l’un à l’autre, appuyez sur la touche F3.

Pour chaque résultat de recherche, vérifiez s’il est repris dans le tableau situé sous l’un des plug-ins WPML. Si tel est le cas, notez :

  • le nom du plug-in
  • le fichier dans lequel la requête a été exécutée
  • le numéro de la ligne dans ledit fichier (1re colonne du tableau)

Informations détaillées de la requête
Informations détaillées de la requête

Requêtes communes de WPML et autres plugins et thèmes

Certaines des requêtes passent par d’autres plug-ins et/ou thèmes ainsi que par le plug-in WPML. Par exemple, Traduction de chaînes de WPML fournit des services de traduction pour les chaînes situées dans le noyau WordPress, le thème et tous les autres plug-ins. Si vous voyez le plug-in Traduction de chaînes quand vous examinez la liste de DB Queries, cela signifie que WPML doit traduire de nombreuses chaînes différentes dans votre site.

Dans ce cas, la requête que vous trouvez lente se trouve sous l’onglet Plugin DB Queries dans le tableau sous le nom de notre plug-in, mais également dans les tableaux suivants liés à d’autres plug-ins, ou dans le troisième onglet, WP Content DB Queries. Merci de vérifier ceci avant de signaler une requête lente via notre forum. Si vous trouvez la même requête dans le troisième onglet, notez le nom du fichier tel qu’il y apparaît. Nous saurons si un thème spécifique est impliqué dans l’exécution de cette requête lente et connaîtrons l’identité du thème.

Signaler vos résultats via le forum technique de WPML

Lorsque vous avez noté toutes les données relatives à la requête lente, veuillez créer un nouveau ticket sur notre forum et expliquer votre problème. Pensez à inclure les éléments suivants dans votre rapport :

  • Le nom de la requête lente et le temps que prend son exécution.
  • Où se trouve cette requête dans le 2e onglet du journal de débogage (le cas échéant). Si elle se trouve dans le plug-in WPML et, si tel est le cas, les fichiers associés ainsi que les numéros de ligne correspondantes.
  • Où se trouve cette requête dans le 3e onglet ainsi que le nom du fichier et le numéro de ligne correspondante (le cas échéant).

Merci de copier le contenu de chaque onglet et de le partager avec nous via Pastebin.

Pour ce faire :

  1. Accédez au forum d’assistance technique de WPML et commencez un nouveau fil. Décrivez les problèmes de performance constatés, et où nous pouvons les consulter.
  2. Ouvrez le 1er onglet des résultats de Debug Objects
  3. Sélectionnez le contenu de cet onglet. Veillez à inclure l’intégralité du contenu des rubriques « Requêtes » et « Erreurs » ainsi que la liste complète des requêtes.

    Inclusion de toutes les requêtes
    Inclusion de toutes les requêtes

  4. Copiez (Ctrl+C) votre sélection
  5. Accédez à pastebin.com et collez (Ctrl+V) votre sélection dans la zone Texte avant d’appuyer sur le bouton Envoyer.

    Collage dans Pastebin
    Collage dans Pastebin

  6. Copiez l’URL dans la barre d’adresse de votre navigateur.

    Copie de l'URL de Pastebin
    Copie de l’URL de Pastebin

  7. Collez l’URL de Pastebin dans le fil d’assistance.
  8. Répétez les étapes 2 à 6 pour le contenu des deux autres onglets.

Désormais, nos assistants savent de quel site vous parlez et quelles sont les pages qui se chargent lentement. Ils peuvent consulter la liste entière des requêtes exécutées et ainsi vous aider à déterminer la cause du problème. Si le problème vient de WPML, nous verrons comment le solutionner (et éventuellement également optimiser les versions ultérieures). S’il vient du thème ou d’un autre plug-in, nous parlerons aux autres auteurs et ferons de notre mieux pour résoudre le problème.


Annexe : Désactiver Xdebug

Xdebug est une extension PHP qui vous permet de déboguer des problèmes de code. Quand il est correctement utilisé, il vous permet également d’analyser la source des problèmes de performance.

Lorsqu’il est exécuté, Xdebug charge le serveur considérablement car il a besoin de capturer ce qui se passe en temps réel. C’est pourquoi vous ne devez JAMAIS exécuter Xdebug quand vous effectuez des tests de performance. Si Xdebug est exécuté lorsque vous tentez de mesurer une performance, les résultats obtenus seront complètement erronés. La majorité de la charge constatée sera due à Xdebug et non au code que vous testez.

Pour correctement identifier les problèmes de performance avec Xdebug, vous devez procéder aux tests sans exécuter Xdebug, obtenir les résultats puis trouver grâce à Xdebug la requête énergivore.

Il se peut que Xdebug soit exécuté sur votre serveur même si vous ne vérifiez pas son rendu. Cela se produit fréquemment quand les gens activent Xdebug pour une vraie opération de débogage et le laissent tourner, pensant que celui-ci après l’opération devient inactif.

Pour vous assurer qu’il est bien désactivé, consultez le rendu phpinfo().

Présence de Xdebug dans le rendu phpinfo
Présence de Xdebug dans le rendu phpinfo (néfaste pour les tests de performance)

Si vous souhaitez désactiver Xdebug, procédez à sa suppression ou tournez cette portion de code en commentaires depuis php.ni ou votre conf.d/xdebug.ini :

zend_extension=xdebug.so

Supprimez la ligne ci-dessus, ne l’ajoutez pas !

Voici à quoi doit ressembler phpinfo quand Xdebug n’est pas exécuté :

phpinfo quand Xdebug n'est pas exécuté (idéal pour les tests de performance)
phpinfo quand Xdebug n’est pas exécuté (idéal pour les tests de performance)

Quand plus aucune référence à Xdebug n’apparaît, vous pouvez être certain qu’il est désactivé.

Que d’autres sections de ce fichier phpinfo fassent ou non référence à Xdebug importe peu tant que Xdebug n’apparaît pas comme extension chargée dans la partie supérieure.