Ajax è una tecnologia web basata su JavaScript che aiuta a costruire siti web dinamici e interattivi. WordPress usa Ajax per alimentare molte delle sue caratteristiche principali dell’area amministrativa, come il salvataggio automatico dei post, la gestione delle sessioni utente e le notifiche.

Per impostazione predefinita, WordPress dirige tutte le chiamate Ajax attraverso il file admin-ajax.php che si trova nella directory /wp-admin del sito.

Numerose richieste Ajax simultanee possono portare a un uso elevato di admin-ajax.php, con conseguente notevole rallentamento del server e del sito web. È uno dei problemi più comuni affrontati da molti siti WordPress non ottimizzati. In genere, si manifesta come un sito web lento o un errore HTTP 5xx (per lo più errori 504 o 502).

In questo articolo, imparerete a conoscere il file admin-ajax.php di WordPress, come funziona, i suoi vantaggi e svantaggi, e come è possibile diagnosticare e risolvere il problema dell’elevato utilizzo di admin-ajax.php.

Pronti a partire? Andiamo!

Cos’È il File admin-ajax.php?

Il file admin-ajax.php contiene tutto il codice che serve per l’instradamento delle richieste Ajax su WordPress. Il suo scopo principale è quello di stabilire una connessione tra il client e il server usando Ajax. WordPress lo usa per aggiornare i contenuti della pagina senza ricaricarla, rendendola così dinamica e interattiva per gli utenti.

Una panoramica di base sul funzionamento di Admin Ajax su WordPress
Una panoramica di base sul funzionamento di Admin Ajax su WordPress

Poiché il core di WordPress usa già Ajax per alimentare le sue varie funzioni di backend, è possibile usare le stesse funzioni per impiegare Ajax su WordPress. Tutto quello che dovete fare è registrare un’azione, puntarla sul file admin-ajax.php del vostro sito e definire come volete che restituisca il valore. Potete impostarlo in HTML, JSON, o anche XML.

Il file admin-ajax.php in WordPress
Il file admin-ajax.php in WordPress

Come indica WordPressTrac, il file admin-ajax.php è apparso per la prima volta in WordPress 2.1. Viene anche chiamato Ajax Admin nella comunità di sviluppo di WordPress.

Controllo dell'utilizzo di Ajax nel cruscotto di MyKinsta
Controllo dell’utilizzo di Ajax nel cruscotto di MyKinsta

Il grafico qui sopra mostra solo la quantità di richieste admin-ajax.php, non da dove potrebbero provenire. È un ottimo modo per vedere quando si verificano i picchi. Potete combinarlo con altre tecniche menzionate in questo articolo per restringere la causa primaria.

Controllo del numero di richieste admin-ajax.php in Chrome DevTools
Controllo del numero di richieste admin-ajax.php in Chrome DevTools

Potete anche usare Chrome DevTools per vedere quante richieste vengono inviate a admin-ajax.php. Controllate anche la scheda Timings nella sezione Network per scoprire quanto tempo ci vuole per elaborare queste richieste.

Per quanto riguarda la ricerca della ragione esatta dietro l’elevato utilizzo di admin-ajax.php, ci sono due cause principali: una dovuta al frontend e l’altra dovuta al backend. Le analizziamo entrambe qui di seguito.

Come Eseguire il Debug di Un Elevato Utilizzo di admin-ajax.php su WordPress

I plugin di terze parti sono uno dei motivi più comuni dietro l’elevato utilizzo di admin-ajax.php. In genere, questo problema è visto sul frontend del sito e si presenta spesso nei rapporti di test di velocità.

Ma i plugin non sono l’unico colpevole qui: anche i temi, il core di WordPress, il web server e un attacco DDoS possono essere una ragione dietro l’elevato utilizzo di Admin Ajax.

Esploriamoli in modo più dettagliato.

Come Determinare l’Origine di un Elevato Utilizzo di admin-ajax.php per Plugin e Temi

Plugin alimentati con Ajax nel repository di WordPress.org
Plugin alimentati con Ajax nel repository di WordPress.org

Ajax è spesso usato dagli sviluppatori di WordPress per creare plugin e temi dinamici e interattivi. Alcuni esempi popolari includono l’aggiunta di funzionalità come la ricerca in tempo reale, i filtri dei prodotti, lo scroll infinito, il carrello dinamico e il box per la chat.

Solo perché un plugin usa Ajax non significa che rallenterà il vostro sito.

Visualizzazione della richiesta admin-ajax.php nel rapporto di WebPageTest
Visualizzazione della richiesta admin-ajax.php nel rapporto di WebPageTest

Di solito, l’Admin Ajax si carica verso la fine del processo di caricamento di pagina. Inoltre, potete impostare il caricamento delle richieste Ajax in modo asincrono, in modo che possa avere poco o nessun effetto sulle prestazioni di pagina percepite dall’utente.

Come potete vedere nel rapporto WebPageTest sopra riportato, admin-ajax.php si carica verso la fine della coda di richieste, ma impiega ancora 780 ms. È un sacco di tempo per una sola richiesta.

Rapporto GTmetrix che indica un importante picco di utilizzo di admin-ajax.php
Rapporto GTmetrix che indica un importante picco di utilizzo di admin-ajax.php

Quando gli sviluppatori non implementano correttamente Ajax su WordPress, questo può portare a drastici problemi di performance. Il rapporto GTmetrix di cui sopra è un perfetto esempio di tale comportamento.

È inoltre possibile usare GTmetrix per scavare nei singoli post e nei dati di risposta. Potete usare questa funzione per individuare la causa del problema.

Per farlo, andate alla scheda Waterfall del report GTmetrix, quindi trovate la voce POST admin-ajax.php e fateci clic sopra. Vedrete tre schede per questa richiesta: Headers, Post e Response.

I dati di header della richiesta POST per admin-ajax.php
I dati di header della richiesta POST per admin-ajax.php

Controllando le schede Post e Response della richiesta, troverete alcuni suggerimenti per scoprire le ragioni alla base del problema di performance. Per questo sito, potete vedere gli indizi nella scheda Response.

Dati della scheda Response per la richiesta POST admin-ajax.php
Dati della scheda Response per la richiesta POST admin-ajax.php

Potete vedere che parte della risposta ha qualcosa a che fare con un tag di input con id impostato su “fusion-form-nonce-656”.

Una rapida ricerca di questa stringa vi condurrà al sito web di ThemeFusion, i creatori del tema Avada. Da qui, potete concludere che la richiesta proviene dal tema, o da uno qualsiasi dei plugin che lo compongono.

In tal caso, è necessario prima assicurarsi che il tema Avada e tutti i relativi plugin siano completamente aggiornati. Se questo non risolve il problema, allora potete provare a disabilitare il tema e vedere se questo risolve tutto.

A differenza della disabilitazione di un plugin, la disabilitazione di un tema non è fattibile nella maggior parte degli scenari. Quindi, provate a ottimizzare il tema per rimuovere eventuali colli di bottiglia. Potete anche contattare il team di supporto del tema per vedere se può suggerire una soluzione migliore.

Il test GTmetrix di un altro sito web lento ha portato a trovare problemi simili dovuti al costruttore di pagine di Visual Composer e il plugin Notification Bar.

I dati Response di un'altra richiesta POST admin-ajax.php
I dati Response di un’altra richiesta POST admin-ajax.php
I dati Post di un'altra richiesta POST admin-ajax.php
I dati Post di un’altra richiesta POST admin-ajax.php

Per fortuna, se non riuscite a risolvere un problema con il plugin, la maggior parte di voi ha a disposizione molti plugin alternativi da provare. Per esempio, quando si tratta di costruttori di pagine, potreste provare anche Beaver Builder o Elementor.

Come Determinare l’Origine di un Elevato Utilizzo di admin-ajax.php

A volte, i dati Post e Response presentati nei rapporti di test della velocità possono non essere così chiari e semplici. In questo caso, trovare l’origine dell’elevato utilizzo di admin-ajax.php non è così facile. In questi casi, si può sempre fare alla vecchia maniera.

Disattivate tutti i plugin del sito, cancellate la cache del sito (se presente) e poi eseguite nuovamente un test di velocità. Se la richiesta admin-ajax.php è ancora presente, allora il colpevole più probabile è il tema. Ma se non trovate nulla da nessuna parte, allora dovete attivare ogni plugin uno per uno ed ripetere i test di velocità ogni volta. Con il processo di eliminazione, bloccherete l’origine del problema.

Suggerimento: l’utilizzo di un ambiente di staging (ad esempio l’ambiente di staging di Kinsta) è un ottimo modo per eseguire i test sul vostro sito senza influenzare il vostro sito live. Una volta determinata la causa e risolto il problema nell’ambiente di staging, potete spostare le modifiche al sito live.

Diagnosticare i Problemi del Server Backend con admin-ajax.php

La seconda ragione più comune per l’elevato utilizzo di admin-ajax.php è l’API WordPress Heartbeat che genera frequenti chiamate Ajax, portando a un elevato utilizzo della CPU sul server. Tipicamente, questo è causato da molti utenti che hanno effettuato l’accesso alla dashboard del backend di WordPress. Questo quindi non si vedrà nei test di velocità.

Per impostazione predefinita, l’API Heartbeat esegue il polling del file admin-ajax.php ogni 15 secondi per salvare automaticamente i post o le pagine. Se usate un server di hosting condiviso, allora non disponete di molte risorse server dedicate al vostro sito. Se state modificando un post o una pagina e lasciate la scheda aperta per un tempo significativo, allora potete accumulare molte richieste Admin Ajax.

Ad esempio, un singolo utente da solo può generare 240 richieste in un’ora mentre scrive o modifica i post!

Frequenti richieste di salvataggio automatico di admin-ajax.php
Frequenti richieste di salvataggio automatico di admin-ajax.php

Sono senza dubbio molte richieste sul backend per un solo utente. Ora immaginate un sito in cui ci sono più editor collegati contemporaneamente. Un sito di questo tipo può accumulare rapidamente un gran numero di richieste Ajax, generando un elevato utilizzo della CPU.

Questa è stata la situazione scoperta da DARTDrones quando l’azienda stava preparando il suo sito WooCommerce per l’aumento di traffico previsto dopo la sua partecipazione a Shark Tank.

Prima di apparire nello show televisivo, il sito di DARTDrones riceveva oltre 4.100 chiamate admin-ajax.php in un giorno, con solo 2.000 visitatori unici. Si tratta di un rapporto richieste/visite molto basso.

Uso elevato di admin-ajax.php su dartdrones.com
Uso elevato di admin-ajax.php su dartdrones.com

Le persone incaricate dell’analisi hanno notato l’URL di riferimento /wp-admin e hanno determinato correttamente la causa principale. Queste richieste erano dovute al fatto che gli amministratori e i redattori di DARTDrones stavano aggiornando frequentemente il sito in previsione dello show.

WordPress ha in parte già da tempo risolto questo problema delle API Heartbeat. Ad esempio, potete ridurre la frequenza delle richieste generate dall’API Heartbeat sugli host con risorse limitate. La frequenza si sospende anche dopo un’ora di inattività della tastiera /mouse/touch.

Traffico Elevato a Causa di un Attacco DDoS o di Bot di Spam

Anche quando il vostro sito viene travolto da un attacco DDoS o da bot di spam potreste sperimentare un elevato utilizzo di admin-ajax.php. Tuttavia, un tale attacco non è necessariamente mirato ad aumentare le richieste di Admin Ajax. È solo un danno collaterale.

Se il vostro sito è vittima di un attacco DDoS, la vostra priorità dovrebbe essere quella di metterlo al riparo dietro un robusto CDN/WAF come Cloudflare o Sucuri. Ogni piano di hosting con Kinsta include l’integrazione gratuita di Cloudflare e Kinsta CDN, che può aiutarvi a scaricare gran parte delle risorse del vostro sito web.

Per saperne di più su come proteggere i vostri siti web da attacchi maligni come questi, potete consultare la nostra guida approfondita su come fermare un attacco DDoS.

Riepilogo

WordPress usa Ajax nella sua API Heartbeat per implementare molte delle sue caratteristiche principali. Tuttavia, questa può portare a un aumento dei tempi di caricamento, se non viene usata correttamente. Ciò è tipicamente causato da un’alta frequenza di richieste al file admin-ajax.php.

In questo articolo, avete imparato le varie cause dell’elevato utilizzo di admin-ajax.php, come diagnosticare ciò che è responsabile di questo sintomo, e come potete risolvere il problema. Nella maggior parte dei casi, seguendo questa guida, il vostro sito dovrebbe tornare a funzionare senza problemi in poco tempo.

Tuttavia, in alcuni casi l’unica soluzione possibile è passare a un server con risorse più elevate, soprattutto per i casi di utilizzo impegnativo come l’ecommerce e i siti di affiliazione. Se gestite un sito di questo tipo, considerate la possibilità di passare a un host WordPress gestito che abbia esperienza nella gestione di questo tipo di problemi di performance.

Se avete ancora problemi con l’elevato utilizzo di admin-ajax.php sul vostro sito WordPress, fatecelo sapere nella sezione commenti.

Salman Ravoof

Salman Ravoof is a self-taught web developer, writer, creator, and a huge admirer of Free and Open Source Software (FOSS). Besides tech, he's excited by science, philosophy, photography, arts, cats, and food. Learn more about him on his website, and connect with Salman on Twitter.