Een veel voorkomend scenario wanneer je dealt met WordPress is het vaststellen van hoog verbruik door admin-ajax.php. Als je al een tijdje met WordPress werkt dan ben je dit hoogstwaarschijnlijk al een keer tegen gekomen wanneer je speed testen uitvoert of de server toegang logs bekijkt. Over het algemeen wordt dit veroorzaakt door externe plugins of van frequente niet cachebare admin dashboard verzoeken, dankzij de Heartbeat API, zoals het automatisch opslaan van concepten. Het is belangrijk dat je dit hoge verbruik vaststelt op het moment dat deze pieken voorkomen aangezien ze bekend staan om een website op z’n knieën te krijgen. Bekijk de onderstaande aanbevelingen om het admin-ajax.php probleem in WordPress te tackelen.

Wat is het admin-ajax.php bestand?

Het admin-ajax.php bestand is opzichzelfstaand geen slecht iets als het op de juiste manier wordt gebruikt. Het bestand is onderdeel van de WordPress kern en is toegevoegd door het ontwikkelteam in versie 3.6. Het doel van admin-ajax.php is het creëren van een connectie tussen de browser en de server door middel van AJAX. Dit maakt opties zoals automatisch opslaan, revisies volgen, login time-outs, sessie management en notificaties over een post die op slot zit als er meerdere gebruikers zijn mogelijk.

Het idee is het hebben van een relatief simpele API die XHR verzoeken elke 15 seconden naar de server stuurt en events kan activeren (of callbacks) als er data ontvangen wordt. Andere componenten kunnen “meeliften” of een notificatie ontvangen over de activiteiten van andere gebruikers. Dit kan dan gebruikt worden om bewerkingen die tegelijkertijd worden uitgevoerd op widgets, menu’s of andere taken die regelmatige updates van de server vereisen te blokkeren — Make WordPress Core

En voor diegene die misschien niet zo tech savvy zijn, jouw aanvaringen met admin-ajax.php kan simpel weg zijn dat je probeert uit te vinden waarom het de speed testen in hulpmiddelen zoals Pingdom (zie voorbeeld hieronder) langzamer maakt. Misschien zie je wel een enorme hoeveelheid verzoeken in jouw hosts toegang log.

Hoog admin-ajax verbruik

Hoog admin-ajax.php verbruik

Als admin-ajax.php voorkomt in speed testen of de toegang log dan is dat meestal het resultaat van 2 verschillende scenario’s die afspelen, 1 op de front-end en het andere scenario in de backend. We bekijken beide.

1. Plugins kunnen een piek in admin-ajax.php veroorzaken

Het eerste en meest voorkomende probleem dat mensen zien met admin-ajax.php is gegenereerd door externe plugins. Dit wordt typisch gezien op de front-end en is te zien in speed testen. Ontwikkelaars maken gebruik van dit bestand en/ of AJAX om functionaliteit aan hun plugin toe te voegen. Het zien van een verzoek naar admin-ajax.php betekend niet meteen dat het ook jouw website langzamer maakt. AJAX laadt nadat de pagina is geladen en bepaalde verzoeken kunnen asynchroon worden geladen. Dit betekend ook niet dat de ontwikkelaar het altijd op de juiste manier doet of dat het voor prestatie is geprogrammeerd. Voor de ontwikkelaars: hier zijn een aantal tips over het juiste gebruik van AJAX in WordPress thema’s en plugins.

Hieronder staan een aantal voorbeelden over het snel diagnosticeren van een admin-ajax.php piek. We maken gebruik van GTmetrix, vanwege het feit dat het ons toestaat om in de individuele post en response data te kunnen graven. Pingdom laat je helaas geen formulier data zien. Je kunt ook gebruik maken van Google Chrome Devtools of WebPageTest.

Hoge verbruikspiek admin-ajax.php van de Visual Composer plugin

Hier is een externe WordPress website die wij vonden die te maken had met enkele zeer hoge pieken in relatie tot het verbruik van admin-ajax.php. Zoals je kunt zien geeft GTmetrix een piek van 8 seconden aan! De rest van de waterval ziet er goed uit, maar dit is zeker iets wat moet worden opgelost door de eigenaar van deze website.

long admin-ajax request

POST admin-ajax.php

Als je klikt op het POST admin-ajax.php verzoek, dan zie je 3 verschillende tabs: Headers, Post en Response. Wanneer je dit soort problemen aan het aanpakken bent dan ben je voornamelijk geïnteresseerd in de inhoud van de Post en Response tabs.Voor deze website zien we meteen aanwijzingen in de Response tab. We kunnen zien dat het verzoek te maken heeft met het “vc_shortcodes-custom-css” script.

post admin-ajax reactie

POST reactie

Na een snelle zoekopdracht in Google kunnen we zien dat dit afkomstig is vanuit de Visual Composer page builder plugin voor WordPress. Je staat ervan te kijken hoeveel Google indexeert.

vc-shortcodes visual composer admin-ajax

Visual composer zoekopdracht

De volgende stap van deze persoon is het verzekeren van het feit dat de Visual Composer plugin up to date is. Als de plugin dat is dan moet er contact gezocht worden met de ontwikkelaars van de plugin en het probleem met admin-ajax.php worden gemeld. Te zien aan deze post op Stack Overflow. dan is dit een veel voorkomend probleem met deze plugin. Het mooie aan WordPress is, dat als een ontwikkelaar niet in staat is het probleem met de plugin op te lossen, dat er waarschijnlijk ook een alternatieve plugin is die ongeveer hetzelfde doet. Bijvoorbeeld: Als het aankomt op page builders dan kun je ook Beaver Builder of Elementor proberen.

Hoog verbruik admin-ajax.php door de Notificatie bar plugin.

Hier is het tweede voorbeeld op onze ontwikkelaars website. Met het installeren van een bepaalde externe plugin zagen we meteen een hoge piek in admin-ajax.php.

admin-ajax gtmetrix langzaam

Langzaam admin-ajax.php verzoek

En weer, als je klikt op het POST admin-ajax.php verzoek dan kun je verder onderzoeken. We kunnen hier zien dat de post data “action=mtsnb_add_impression&bar_id=88&ab_variation=none” bevat.

gtmetrix post gegevens

POST actie gegevens

Typisch is het eerste gedeelte van de post actie gerelateerd aan een CSS class in een plugin. We doen weer een snelle google zoekopdracht op “mtsnb” en het eerste resultaat gaat over de Notificatie Bar plugin die we geïnstalleerd hebben op onze ontwikkel website.

mtsnb

Zoekopdracht voor mtsnb actie

Als je een ontwikkelaar bent dan zijn er uiteraard andere manieren om op te sporen welke plugin de POST responses genereerd, maar wij hebben uitgevonden dat een snelle speed test in samenwerking met de google zoekmachine net zo effectief kan zijn.

Betrouwbare manier om de origine van admin-ajax.php vast te stellen

Hierboven waren een aantal manieren om snel uit te vinden welke plugin op jouw WordPress website het probleem veroorzaakt. Naar onze ervaring werkt dit 99% van de tijd. Er zijn ook gevallen waar de post data of acties niet zo helder waren en je kunt het dus ook op de ouderwetse manier doen. Schakel alle plugins op jouw website uit. Doe een speed test en als admin-ajax.php niet naar voren komt schakel dan de plugins weer 1 voor 1 in terwijl je na elke activatie de speed test herhaald. Het gebruik van eliminatie is een betrouwbare manier op de oorzaak te vinden.

Dit is ook het perfecte moment voor de test omgeving van Kinsta. Kopieer jouw live website naar de testomgeving en doe de testen daar, zonder dat je live website daar last van heeft. Als je de oorzaak hebt vastgesteld kun je wijzigingen in je live website aanbrengen.

Het rapport over AJAX verbruik in MyKinsta analytics kan een andere goede optie zijn om jou te helpen dit soort problemen op te lossen omdat je daar kunt zien of er pieken in verbruik zijn gedurende bepaalde periodes.

Prestatie meting AJAX verbruik

Prestatie meting AJAX verbruik

2. CPU-problemen met admin-ajax.php in de backend.

Het tweede grote probleem is dat de WordPress Heartbeat API gebruik maakt van admin-ajax.php om AJAX calls van de webbrowser te maken en dit kan hoog CPU verbruik veroorzaken. Elk AJAX verzoek laadt de complete WordPress backend terwijl het alle vormen van caching omzeilt. Meestal zie je dit niet in een speed test. Dit is extra belangrijk voor de gebruikers die een goedkope shared hosting hebben aangezien zij meestal niet veel speelruimte hebben wat betreft CPU gebruik. WP Tavern heeft dit mee gemaakt en is vanwege meerdere schorsingen weg verhuist van HostGator.

Een scenario waar je voorzichtig mee moet zijn is het automatisch opslaan van WordPress en het open laten staan van tabs. Als voorbeeld: We hebben een concept gemaakt in WordPress en daarna de tab open laten staan. De Heartbeat API vraagt de admin-ajax.php standaard elke 15 seconden om de pagina automatisch op te slaan. Je kunt dit zien in de access log in het MyKinsta Dashboard. Als we deze tab open laten staan en de computer aan laten staan dan resulteert dit, voor alleen deze post, in 5760 verzoeken per dag!

post admin-ajax.php verzoeken

Frequentie automatisch opslaan admin-ajax.php verzoeken

Dat zijn veel verzoeken in de backend voor maar 1 persoon. Wat gebeurt er als je een website hebt waar er meerdere editors zijn? Deze verzoeken kunnen snel vermeerderen. Wij hebben dit meegemaakt in onze case-study met DARTdrones, waarin wij hen hielpen hun WooCommerce website te schalen voor Shark Tank. Zij hadden 4100 admin-ajax.php calls in 24 uur met maar 2000 unieke bezoekers. Dat is geen goede ratio voor verzoeken-per-bezoeken. Wij waren in staat om vast te stellen dat dit veroorzaakt werd door de wp-admin verwijzings url, welke werd gegenereerd dankzij hun admins die de website in voorbereiding van de show aan het updaten waren.

Zwaar admin ajax verbruik

Zwaar admin ajax verbruik

Er is een manier om een aantal van deze problemen met admin-ajax.php op te lossen. Denk aan automatisch opslaan, revisies en het blokkeren van berichten. Dat is het moment waar de gratis Heartbeat Control plugin van Jeff Matson om de hoek komt kijken.

heartbeat control

Heartbeat control plugin

De Heartbeat Control plugin heeft op het moment 70.000+ actieve installaties met een 5 uit 5 sterren waardering. Het is twee jaar geleden sinds de plug een update heeft gehad, maar dat heeft te maken met het feit dat er vrijwel niets is veranderd aan de manier waarom de Heartbeat API werkt. Je kunt deze plugin downloaden van de WordPress Repository of door te zoeken in jouw WordPress Dashboard onder “Voeg plugin toe”.

De plugin maakt het mogelijk om de frequentie van de WordPress Heartbeat API met een paar klikken te beheren. De eerste optie maakt het mogelijk de lokaties waar de Heartbeat plugin aan staat te beheren, zoals het overal uitschakelen of alleen inschakelen op berichten die worden bewerkt. Wij raden aan om voor de laatste optie te kiezen, tenzij je er 100% zeker van bent dat je het overal kunt uitschakelen zonder plugins die het gebruiken kapot te maken.

Heartbeat beheer locaties

Heartbeat beheer locaties

De tweede optie staat toe de interval frequentie te kiezen. Het wijzigen van 15 seconden naar 60 seconden kan het aantal verzoeken drastisch verminderen en het resource verbruik om laag brengen.

heartbeat control frequentie

Heartbeat control frequentie

Je zou ook gebruik kunnen maken van een premium plugin als perfmatters (ontwikkeld door een teammember van Kinsta), welke het mogelijk maakt om heartbeat uit te schakelen, de heartbeat frequentie te wijzigen en de frequentie van het automatisch opslaan aan te passen.

Schakel Heartbeat uit en limiteer Heartbeat met perfmatter

Schakel Heartbeat uit en limiteer Heartbeat met perfmatter – admin-ajax.php verzoeken

Samenvatting

Zoals je kunt zien zijn er snelle en gemakkelijke opties om te diagnosticeren en admin-ajax.php problemen op te lossen. Meestal komen ze voort uit het gebruik van externe plugins die conflicten veroorzaken of misschien wel slecht geprogrammeerd zijn. Als je hoge CPU load ervaart in de backend als resultaat van admin-ajax.php dan zou je misschien een beheerde WordPress hosting als Kinsta, die meer ervaring hebben met het dealen van deze type prestatie problemen, moeten overwegen.

Heb jij geworsteld met admin-ajax.php op jouw WordPress website? Of heb je misschien nog meer tips, We horen jouw ideeën en verhalen graag hier onder.

13.9K
Delen