Quando si ha a che fare con WordPress, è molto comune fare la diagnosi dell’uso di admin-ajax.php. Se avete lavorato con WordPress per un po’, molto probabilmente lo avrete incontrato durante i test di velocità o mentre controllavate i log di accesso al server. L’utilizzo di admin-ajax.php proviene generalmente da plug-in di terze parti o da frequenti richieste provenienti dal pannello di amministrazione non memorizzabili nella cache, a causa dell’API Heartbeat, come il salvataggio automatico delle bozze. È importante, tuttavia, diagnosticare i picchi utilizzo di admin-ajax.php quando li osservate, poiché possono causare il rallentamento del sito. Ecco i nostri consigli per affrontare al meglio il problema di admin-ajax.php in WordPress.

Cos’è il File admin-ajax.php?

Se usato correttamente, il file admin-ajax.php non costituisce un problema. Questo fa parte del core ed è stato aggiunto dal team di sviluppo di WordPress nella versione 3.6. Lo scopo del file admin-ajax.php è quello di creare una connessione tra il browser e il server utilizzando AJAX. Questo consente funzionalità estese come il miglioramento del salvataggio automatico, il monitoraggio delle revisioni, i timeout di accesso, la gestione delle sessioni e le notifiche relative al blocco di un post in presenza di più editor. Sono tutte ottime funzionalità, specialmente per chi lavora con più amministratori e autori.

L’idea è di avere un’API relativamente semplice che invia richieste XHR al server ogni 15 secondi e attiva eventi (o callback) al ricevimento dei dati. In questo modo, altri componenti sarebbero in grado di “chiedere un passaggio” o ricevere notifiche sulle attività di un altro utente. Questo può essere utilizzato per bloccare la modifica simultanea di widget e menu o qualsiasi altra attività che richieda aggiornamenti regolari dal server. — Make WordPress Core

E per quelli di voi che forse non sono esperti di tecnologia, la vostra unica opportunità di imbattervi in admin-ajax.php potrebbe essere che state cercando di capire perché questo sta rallentando i vostri test di velocità in strumenti come Pingdom (come visto in l’esempio sotto). Oppure potreste vedere tonnellate di richieste nei log degli accessi del vostro host.

Alto utilizzo di admin-ajax

Alto utilizzo di admin-ajax.php

Vedere admin-ajax.php nei test di velocità e nei log di accesso è in genere il risultato del verificarsi di due diversi eventi, uno dal front-end e l’altro dal back-end, che approfondiamo di seguito.

1. I Plugin Possono Bloccare admin-ajax.php

Il primo e più comune problema che si osserva con admin-ajax.php è generato da plugin di terze parti. Questo accade comunemente sul front-end e si osserva nei test di velocità. Gli sviluppatori utilizzano questo file e/o AJAX per aggiungere funzionalità ai propri plugin. Ma solo perché vedete una richiesta di admin-ajax.php non significa necessariamente che sta rallentando il vostro sito. AJAX viene caricato dopo il caricamento della pagina e alcune richieste possono essere caricate in modo asincrono. Tuttavia, questo non significa che lo sviluppatore lo stia facendo sempre nel modo corretto, o che il plugin sia stato programmato in modo accorto per le prestazioni. Per gli sviluppatori, ecco alcuni suggerimenti su come utilizzare correttamente AJAX in temi e plugin di WordPress.

Di seguito sono riportati un paio di esempi su come abbiamo diagnosticato rapidamente un picco nell’utilizzo di admin-ajax.php. Stiamo utilizzando GTmetrix, perché ci consente di andare in profondità fin nei singoli dati di post e risposte. Purtroppo, Pingdom non consente di visualizzare i dati dei moduli di richiesta. Potete anche utilizzare Google Chrome Devtools o WebPageTest.

Alti Picchi di admin-ajax.php dal Plugin Visual Composer

Ecco l’esempio un sito WordPress di una terza parte che abbiamo riscontrato che stava registrando alcuni picchi molto elevati di utilizzo admin-ajax.php. Come potete vedere, GTmetrix per questo sito segnala un picco di oltre 8 secondi! Il resto della loro cascata sembra regolare, ma questo picco deve assolutamente essere ridimensionato dal proprietario del sito.

Lunga richiesta admin-ajax

POST admin-ajax.php

Se fate clic sulla richiesta POST admin-ajax.php, vedrete tre diverse schede: Headers, Post e Response. Quando rilevate questo tipo di anomalie, le schede Post e Response sono quelle che ci interessano di più. Per questo sito, abbiamo subito un riscontro nella scheda Response. Possiamo vedere che parte della richiesta ha a che fare con lo script “vc_shortcodes-custom-css”.

risposta post admin-ajax

Risposta POST

Un veloce copia e incolla in Google, e vediamo subito che questa richiesta proviene dal page builder Visual Composer per WordPress. Sareste sorpresi nel vedere quanto indicizza Google.

vc-shortcodes visual composer admin-ajax

Ricerca per visual composer

Il passo successivo dovrebbe essere quello di assicurarsi che il proprio plugin Visual Composer sia aggiornato. Se lo è, si dovrebbero contattare gli sviluppatori del plugin e segnalare il problema riscontrato con admin-ajax.php. Infatti, questo sembra essere un problema che si verifica di frequente con questo plugin, come si legge in questo post su Stack Overflow. La cosa bella di WordPress è che se uno sviluppatore non è in grado di risolvere il problema che avete con il suo plugin, ci saranno molto probabilmente dei plugin alternativi per farvi fare la stessa cosa. Ad esempio, quando si tratta di page builder, potete anche provare Beaver Builder o Elementor.

Alti Picchi admin-ajax.php dal Plugin Notification Bar

Ecco il secondo esempio ricavato dal nostro sito per sviluppatori. Dopo aver installato un certo plugin di una terza parte, abbiamo immediatamente osservato un enorme picco su admin-ajax.php.

lento gtmetrix admin-ajax

Lenta richiesta admin-ajax.php

Di nuovo, se fate clic sulla richiesta POST admin-ajax.php, avrete informazioni più approfondite. Qui possiamo vedere che nei dati post c’è il valore “action=mtsnb_add_impression&bar_id=88&ab_variation=none”.

gtmetrix dati post

Dati POST action

In genere, la prima parte di un’azione post riguarderà anche una classe CSS in un plugin. Quindi eseguiamo di nuovo una rapida ricerca su Google per “mtsnb” e il primo risultato che ci appare è, infatti, il plugin Notification Bar, in esecuzione nel nostro sito di sviluppo.

mtsnb

Ricerca per mtsnb action

Se siete sviluppatori, avrete naturalmente altri modi per rintracciare il plugin che potrebbe generare la risposta POST, ma abbiamo scoperto che un test rapido della velocità e la ricerca su Google possono comunque essere abbastanza efficaci.

Via di Sicurezza per Determinare l’Origine delle richieste admin-ajax.php

Di sopra sono riportati alcuni semplici metodi per trovare rapidamente il plugin che potrebbe causare problemi nel vostro sito WordPress. Nella nostra esperienza, questi metodi funzionano il 99% delle volte. Ma per quelle situazioni in cui i dati post o le azioni non dovessero essere chiari, potete sempre fare l’analisi alla vecchia maniera. Semplicemente, disabilitate tutti i plugin del vostro sito WordPress. Eseguite un test di velocità sul vostro sito e, se non trovate admin-ajax.php da nessuna parte, riattivate ogni plugin uno per uno, ed eseguite nuovamente il test ogni volta. Andare per esclusione è un modo sicuro per trovare l’origine delle richieste.

Questo è anche il momento in cui l’ambiente di staging di Kinsta è più utile. Vi basta creare una copia di staging del vostro sito WordPress per eseguire i vostri test senza intaccare il sito live. Una volta individuata la causa, potrete apportare le modifiche al sito live.

Il rapporto sull’utilizzo di AJAX nelle statistiche di MyKinsta può essere un altro ottimo strumento per risolvere questo tipo di anomalia, in quanto vi permette di capire se il vostro sito sta registrando determinati picchi AJAX in determinati periodi.

Monitoraggio performance utilizzo AJAX

Monitoraggio performance utilizzo AJAX

2. Problemi di CPU con admin-ajax.php sul Back-end

La seconda anomalia di rilievo nasce dal fatto che l’API Heartbeat di WordPress utilizza admin-ajax.php per eseguire chiamate AJAX provenienti dal browser, e questo può causare un elevato utilizzo della CPU. Ogni richiesta AJAX, inoltre, carica l’intero back-end di WordPress, eludendo ogni forma di caching. In genere non osserverete questa anomalia nei test di velocità. É importante saperlo per coloro che utilizzano host condivisi a basso costo, dato che non hanno familiarità con l’utilizzo della CPU. WP Tavern lo ha sperimentato in prima persona e alla fine sono andati via da HostGator a causa di sospensioni multiple.

Una cosa a cui bisogna stare molto attenti riguarda il salvataggio automatico in WordPress e l’abitudine di lasciare aperte le schede. Ad esempio, abbiamo creato una nuova bozza nel nostro sito di sviluppo e abbiamo lasciato la scheda aperta. Di default, l’API Heartbeat sonda il file admin-ajax.php ogni 15 secondi per effettuare un salvataggio automatico. Potete verificarlo qui sotto nel log degli accessi del cruscotto di MyKinsta. Se dovessimo lasciare la nostra scheda aperta e lasciare il nostro computer, quel solo post potrebbe generare 5.760 richieste in un giorno!

richieste post admin-ajax.php

Frequenti richieste autosave admin-ajax.php

Sono davvero molte richieste sul back-end per una sola persona. Ma cosa succede se avete a che fare con un sito dove ci sono più editor? Queste richieste possono moltiplicarsi abbastanza rapidamente. Lo abbiamo sperimentato nel nostro recente caso di studio di DARTDrones, in cui li stavamo aiutando a scalare il loro sito WooCommerce per Shark Tank. Hanno ricevuto oltre 4.100 chiamate admin-ajax.php in un periodo di 24 ore con soli 2.000 visitatori unici. Non è un ottimo rapporto tra richieste e visite. Siamo stati in grado di rilevarlo dalla URL del referrer di wp-admin, che veniva generato dai loro amministratori che stavano aggiornando il sito in preparazione dello show.

alto utilizzo admin ajax
Utilizzo pesante di admin-ajax.php su dartdrones.com

C’è un metodo che può aiutarvi a risolvere alcune delle anomalie con il sondaggio di admin-ajax.php sul back-end per quel che riguarda salvataggi automatici, revisioni, blocchi di sicurezza, ecc. Qui entra in gioco il plugin gratuito Heartbeat Control di Jeff Matson.

heartbeat control

Il plugin Heartbeat control

Il plugin Heartbeat Control vanta attualmente oltre 70.000 installazioni attive, con una valutazione di 5 stelle su 5. Sono passati 2 anni da quando è stato aggiornato, ma questo è semplicemente dovuto al fatto che non è cambiato molto nel modo in cui funziona l’API Heartbeat. Potete scaricarlo dalla repository di WordPress o cercarlo all’interno della dashboard alla voce “Aggiungi nuovo” plugin.

Heartbeat Control vi consente di gestire la frequenza dell’API Heartbeat di WordPress con pochi semplici clic. La prima opzione vi consente di controllare le posizioni degli heartbeat, di disabilitarli ovunque, oppure consentirli solo nelle pagine di modifica dei post. Vi consigliamo di scegliere quest’ultima opzione, a meno che non siate convinti di poterli disabilitare ovunque senza interrompere il funzionamento di un plugin che potrebbe utilizzare l’API.

heartbeat control locations

Localizzazioni Heartbeat control

La seconda opzione vi consente di scegliere la frequenza dell’intervallo. Passare da 15 a 60 secondi può aiutarvi a ridurre drasticamente il numero di richieste e risparmiare sulle risorse del server (riduce il carico della CPU).

heartbeat control frequency

Frequenza Heartbeat control

Potreste anche utilizzare un plugin premium come perfmatters (sviluppato da un membro del team di Kinsta), che vi consente di disabilitare l’heartbeat, cambiare la frequenza e modificare l’intervallo del salvataggio automatico.

Disabilita e limita Heartbeat con perfmatters

Disabilitare e limitare Heartbeat con perfmatters – richieste admin-ajax.php

Riepilogo

Come potete vedere, ci sono alcune opzioni rapide e semplici per individuare e risolvere i problemi di admin-ajax.php. Normalmente sono generati da plugin di terze parti che potrebbero essere in conflitto tra loro o essere mal codificati. Se osservate un carico della CPU sul back-end come conseguenza delle richieste di admin-ajax.php, potreste anche prendere in considerazione un host WordPress gestito come Kinsta, che vanta una maggiore esperienza nell’affrontare questo tipo di problemi di prestazioni.

Avete avuto problemi con admin-ajax.php nel vostro sito WordPress? Oppure avete qualche consiglio da aggiungere? Se è così, ci piacerebbe avere le vostre considerazioni qui sotto.

14.3K
Condivisioni