Un scénario très commun lorsqu’on traite avec WordPress est le diagnostic d’une utilisation élevée de admin-ajax.php. Si vous travaillez avec WordPress depuis un certain temps, vous l’avez probablement rencontré lors de l’exécution de tests de vitesse ou de la vérification des logs d’accès à votre serveur. Ceci est généralement causé par des plugins tiers ou par de fréquentes requêtes de tableau de bord d’administration non modifiables, en raison de l’API Heartbeat, comme l’enregistrement automatique des brouillons. Il est cependant important que vous diagnostiquiez les pics élevés d’admin-ajax.php quand vous les voyez, car ils sont connus pour faire ralentir un site. Jetez un coup d’œil aux recommandations suivantes pour résoudre le problème d’admin-ajax.php dans WordPress.

Qu’est-ce que le fichier admin-ajax.php ?

Le fichier admin-ajax.php lui-même n’est pas une mauvaise chose quand il est utilisé correctement. Il fait partie du noyau, et a été ajouté par l’équipe de développement WordPress en version 3.6. Le but de admin-ajax.php est de créer une connexion entre le navigateur et le serveur en utilisant AJAX. Cela permet des fonctionnalités étendues telles que l’amélioration de l’enregistrement automatique, le suivi des révisions, les délais de connexion, la gestion des sessions et les notifications concernant le verrouillage d’un article lorsqu’il y a plusieurs éditeurs. Ce sont toutes des fonctionnalités formidables, en particulier pour ceux qui travaillent avec plusieurs administrateurs et auteurs.

L’idée est d’avoir une API relativement simple qui envoie des requêtes XHR au serveur toutes les 15 secondes et déclenche des événements (ou rappels) à la réception des données. D’autres composants seraient en mesure de « faire du stop » ou d’être avertis des activités d’un autre utilisateur. Ceci peut être utilisé pour bloquer l’édition simultanée de widgets et de menus ou toute autre tâche nécessitant des mises à jour régulières du serveur. — Make WordPress Core

Et pour ceux d’entre vous qui ne sont peut-être pas aussi experts en technologie, votre seule exposition à admin-ajax.php pourrait simplement être que vous essayez de comprendre pourquoi il ralentit vos tests de vitesse dans des outils tels que Pingdom (comme dans l’exemple ci-dessous). Ou vous pouvez voir des tonnes de requêtes dans les logs d’accès de votre hébergeur.

Utilisation élevée de admin-ajax.php

Utilisation élevée de admin-ajax.php

Voir admin-ajax.php dans les tests de vitesse et les journaux d’accès est généralement le résultat de deux scénarios différents, l’un en amont et l’autre en aval, dans lequel nous allons nous plonger ci-dessous.

1. Les plugins peuvent causer des pics de admin-ajax.php

Le premier et le plus commun des problèmes que les gens voient avec admin-ajax.php est celui généré par des plugins tiers. C’est ce que l’on voit généralement en front-end et cela se voit dans les tests de vitesse. Les développeurs utilisent ce fichier et/ou AJAX pour ajouter des fonctionnalités à leurs plugins. Mais ce n’est pas parce que vous voyez une requête à admin-ajax.php qu’elle ralentit nécessairement votre site. AJAX se charge après le chargement de la page et certaines requêtes peuvent être chargées de manière asynchrone. Cependant, cela ne signifie pas toujours que le développeur le fait de manière correcte ou que c’est codé efficacement pour la performance. Pour les développeurs, voici quelques conseils sur la façon d’utiliser correctement AJAX dans les thèmes et plugins WordPress.

Voici ci-dessous quelques exemples sur la façon dont nous avons rapidement diagnostiqué un pic de admin-ajax.php. Nous utilisons GTmetrix parce qu’il nous permet de creuser dans les posts individuels et les données de réponses. Pingdom, malheureusement, ne vous permet pas de voir les données du formulaire demandé. Vous pouvez également utiliser Google Chrome Devtools ou WebPageTest.

Haute utilisation de admin-ajax.php du plugin Visual Composer

Voici un site WordPress tiers que nous avons trouvé qui rencontrait de très gros pics avec admin-ajax.php. Comme vous pouvez le voir, GTmetrix rapporte un pic de plus de 8 secondes ! Le reste de leur Waterfall semble correct, mais c’est quelque chose qui doit certainement être abordé par le propriétaire du site.

long admin-ajax request

POST admin-ajax.php

Si vous cliquez sur la demande POST admin-ajax.php, vous pouvez voir trois onglets différents : Headers, Post, et Response. Lorsque vous diagnostiquez ce type de problèmes, vous êtes vraiment intéressé par le contenu des onglets Post et Response. Pour ce site, on peut voir instantanément des indices dans l’onglet Response. Nous pouvons voir qu’une partie de la requête concerne le script « vc_shortcodes-custom-css ».

Réponse post admin-ajax

Réponse POST response

Un copier-coller rapide dans Google et nous pouvons voir instantanément que cela vient du plugin de création de page Visual Composer pour WordPress. Vous seriez surpris de la quantité que Google indexe.

Recherche de Visual composer

Recherche de Visual composer

La prochaine étape pour cette personne devrait être de s’assurer que son plugin Visual Composer est complètement à jour. Si c’est le cas, elle devrait contacter les développeurs du plugin et signaler le problème avec admin-ajax.php. En fait, cela semble être un problème courant avec ce plugin, comme nous l’avons vu dans ce post sur Stack Overflow. La grande chose au sujet de WordPress est que si un développeur n’est pas en mesure de résoudre votre problème avec le plugin, il existe très probablement d’autres plugins que vous pouvez essayer et qui font la même chose. Par exemple, quand il s’agit de constructeurs de pages, vous pouvez aussi essayer Beaver Builder ou Elementor.

Haute utilisation de admin-ajax.php du plugin Notification Bar

Voici le deuxième exemple sur notre site de développeur. Lors de l’installation d’un certain plugin tiers, nous avons instantanément vu un pic énorme pour admin-ajax.php.

admin-ajax gtmetrix slow

Requête admin-ajax.php lente

Encore une fois, si vous cliquez sur la requête POST admin-ajax.php, vous enquêtez plus loin. Nous pouvons voir que dans les données du post qu’il y a « action=mtsnb_add_impression&bar_id=88&ab_variation=none ».

Données d'action POST

Données d’action POST

Généralement, la première partie d’une action post se rapporte aussi à une classe CSS dans un plugin. Donc encore une fois, nous faisons une recherche rapide sur Google avec « mtsnb » et le premier résultat qui s’affiche est en fait, le plugin Notification Bar que nous avons sur notre site de développement.

mtsnb

Recherche d’action mtsnb

Si vous êtes un développeur, il y a bien sûr d’autres façons de trouver quel plugin peut générer une réponse POST, mais nous avons constaté qu’un test de vitesse rapide et une recherche Google peuvent également être très efficaces.

Moyen de déterminer l’origine de admin-ajax.php

Ci-dessus sont quelques façons simples de trouver rapidement le plugin sur votre site WordPress qui pourrait être à l’origine du problème. D’après notre expérience, cela fonctionne 99 % du temps. Mais pour les autres moments où les données ou les actions ne sont pas aussi claires, vous pouvez toujours le faire à l’ancienne. Désactivez simplement tous les plugins de votre site WordPress. Effectuez un test de vitesse sur votre site, si admin-ajax.php est introuvable, réactivez chaque plugin un par un pendant que vous exécutez des tests à chaque fois. L’utilisation d’un processus d’élimination est un moyen sûr de trouver l’origine.

C’est aussi le moment idéal où l’environnement de développement de Kinsta s’avère pratique. Copiez simplement votre site WordPress sur le développement et exécutez vos tests sans affecter votre site en production. Une fois que vous avez déterminé la cause, vous pouvez apporter les modifications à votre site en production.

Le rapport d’utilisation d’AJAX dans MyKinsta analytics peut être une autre excellente façon de vous aider à dépanner ce type de problèmes car vous pouvez déterminer si vous voyez certains pics AJAX pendant certaines périodes.

Surveillance de la performance de l'utilisation de l'AJAX

Surveillance de la performance de l’utilisation de l’AJAX

2. Problèmes de CPU avec admin-ajax.php en back-end

Le deuxième problème majeur est que l’API WordPress Heartbeat utilise admin-ajax.php pour exécuter les appels AJAX à partir du navigateur Web, ce qui peut entraîner une forte utilisation du CPU. Chaque requête AJAX charge également le back-end complet de WordPress tout en contournant toutes les formes de cache. Généralement, vous ne le verrez pas dans les tests de vitesse. C’est particulièrement important à savoir pour ceux qui utilisent des hébergements mutualisés bon marché, car ils n’ont pas beaucoup de marge de manœuvre quand il s’agit de l’utilisation du CPU. WP Tavern a vécu cette expérience et a en fait migré loin de HostGator en raison de suspensions multiples.

Un scénario avec lequel vous devez faire attention est l’enregistrement automatique dans WordPress et le fait de laisser les onglets ouverts. Par exemple, nous avons créé un nouveau brouillon sur notre site de développement et laissé l’onglet ouvert. L’API Heartbeat interroge par défaut le fichier admin-ajax.php toutes les 15 secondes pour effectuer une sauvegarde automatique. Vous pouvez le voir ci-dessous dans le journal d’accès du tableau de bord MyKinsta. Si nous laissions notre onglet ouvert et que nous laissons notre ordinateur allumé, ce seul article pourrait générer 5 760 requêtes par jour !

Requêtes fréquentes de sauvegardes automatiques via admin-ajax.php

Requêtes fréquentes de sauvegardes automatiques via admin-ajax.php

C’est beaucoup de demandes en arrière-plan pour une seule personne. Mais que se passe-t-il si vous avez affaire à un site où il y a plusieurs éditeurs ? Ces demandes peuvent se multiplier assez rapidement. Nous en avons fait l’expérience lors de notre récente étude de cas avec DARTDrones, dans laquelle nous les aidions à faire évoluer leur site WooCommerce pour Shark Tank. Ils ont reçu plus de 4 100 appels admin-ajax.php en 24 heures avec seulement 2 000 visiteurs uniques. Il ne s’agit pas d’un grand rapport entre le nombre de demandes et le nombre de visites. Nous avons pu le déterminer à partir de l’URL du référent wp-admin, qui était générée en raison de la mise à jour du site par leurs administrateurs en préparation de l’exposition.

high admin ajax usage
utilisation intensive de admin-ajax.php sur dartdrones.com

Il y a cependant un moyen d’aider à résoudre certains des problèmes avec l’interrogation de admin-ajax.php sur le back-end quand il s’agit de sauvegarde automatique, révisions, blocages, etc. C’est là que le plugin gratuit Heartbeat Control de Jeff Matson entre en jeu.

heartbeat control

Heartbeat control plugin

Le plugin Heartbeat control a actuellement plus de 80,000 installations actives avec une note de 4.5 étoiles sur 5. Vous pouvez le télécharger à partir du référentiel WordPress ou en le recherchant dans votre tableau de bord WordPress sous « Ajouter » Extensions.

Le plugin vous permet de gérer la fréquence de l’API Heartbeat de WordPress avec seulement quelques règles simples. Nous vous recommandons de désactiver cette fonction partout, sauf sur vos pages d’édition d’articles. Donc, ajoutez d’abord une règle qui désactive le Heartbeat sur le tableau de bord de WordPress et sur le front-end.

Désactiver Heartbeat via Heartbeat Control sur le tableau de bord et le front-end

Désactiver Heartbeat via Heartbeat Control sur le tableau de bord et le front-end

Deuxièmement, vous devrez modifier le comportement du Heartbeat. Assurez-vous donc que « Post Editor » est sélectionné et changez la fréquence de la valeur par défaut de 15 secondes à 60 secondes. Cela peut vous aider à réduire considérablement le nombre de requêtes et à économiser les ressources du serveur (réduire la charge CPU).

Modifier Heartbeat Control pour 60 secondes

Modifier Heartbeat Control pour 60 secondes

Vous pouvez également utiliser un plugin premium comme perfmatters (développé par un membre de l’équipe de Kinsta), qui vous permet de désactiver le Heartbeat, de changer la fréquence de Heartbeat et de modifier l’intervalle de sauvegarde automatique.

Désactiver et limiter le Heartbeat avec perfmatters – requêtes admin-ajax.php

Désactiver et limiter le Heartbeat avec perfmatters – requêtes admin-ajax.php

Résumé

Comme vous pouvez le voir, il existe des options rapides et faciles à la fois pour diagnostiquer et résoudre les problèmes admin-ajax.php. Généralement, ils proviennent de plugins tiers qui peuvent être en conflit les uns avec les autres ou qui sont peut-être mal codés. Si vous rencontrez une charge CPU en back-end à cause de admin-ajax.php, vous pouvez également considérer un hébergeur WordPress infogéré comme Kinsta qui est plus expérimenté dans ce type de problèmes de performances.

Avez-vous eu des problèmes avec admin-ajax.php sur votre site WordPress ? Ou peut-être avez-vous d’autres conseils à donner. Si c’est le cas, nous aimerions savoir ce que vous en pensez.

75
Partages