Ogni plug-in che aggiungete al vostro sito di WordPress aggiungerà tempo di esecuzione e query del database. In questo tutorial spieghiamo come controllare da dove proviene il tempo di esecuzione. Con questa informazione, voi e il team di WPML potete trovare i colli di bottiglia e migliorare le prestazioni del vostro sito.

Installare e attivare il plug-in Debug Objects

Utilizzeremo il plug-in Debug Objects per visualizzare e comprendere le query del database necessarie per riprodurre il vostro sito. Debug Objects mostrerà un’analisi dettagliata delle query riguardanti ciascuna pagina del sito. Questo output è visibile esclusivamente a voi, quando avete effettuato l’accesso come amministratore. I visitatori non visualizzeranno le informazioni di debug.

Per installare il plug-in, andate sulla dashboard (bacheca) di WordPress e scegliete Plugins (Plug-in) dal menu a sinistra, quindi Add new (Aggiungi nuovo). Nel campo di ricerca digitate “debug objects” e premete il tasto invio.

Ora sulla schermata dei risultati di ricerca cliccate il pulsante Install (Installa):

Installazione del plug-in Debug Objects
Installazione del plug-in Debug Objects

Dopo aver completato l’installazione, attivate il plug-in.

In alternativa potete scaricare Debug Objects direttamente dal repository di WordPress e caricarlo in wp-content/plugins sul vostro server. Poi attivatelo tramite la pagina Plugins (Plug-in) nella vostra area di amministrazione di WordPress.

Disattivare Xdebug

Se non sapete cos’è Xdebug, sentitevi liberi di saltare questa sezione. Se state usando Xdebug, accertatevi di disattivarlo prima di eseguire il test delle prestazioni. Xdebug provocherà un carico significativo sul vostro server e tutti i risultati verranno alterati. Scoprite come disattivare Xdebug.

Configurare Debug Objects per analizzare le query SQL

Innanzitutto aggiungete questa linea al vostro file wp-config.php (questo file si trova nella directory principale quando WordPress è installato):

define( 'SAVEQUERIES', TRUE );

Ora andate su Tools (Strumenti) -> Debug Objects e disattivate tutte le opzioni eccetto DB Query:

Configurare Debug Objects
Configurare Debug Objects

Scorrete questa schermata verso il basso e cliccate sul pulsante Save (Salva).

Controllare l’output del debug

Dopo aver attivato e configurato correttamente il plug-in potete iniziare il debug. Quando siete collegati come amministratore di WordPress, visitate una pagina qualsiasi dove vi sembra che sia lenta (se succede per molte pagine, scegliete quella più lenta) e cliccate sul link Objects (Oggetti) sulla barra del menu superiore dell’amministratore:

Il link Debug Objects (Esegui debug degli oggetti) è pronto per voi
Il link Debug Objects è pronto per voi

Visualizzerete tre schede con le informazioni di debug:

Output di Debug Objects in tre schede
Output di Debug Objects in tre schede

Come leggere e comprendere l’output del debug

In queste tre tabelle visualizzerete molti dati, ma solo parte di essi ci interessano e sono rilevanti per il plug-in di WPML. In linea generale siamo interessati a due cose:

  • Query molto lente: a volte gran parte del problema relativo alle prestazioni è il risultato di poche query che hanno tempi di elaborazione troppo lunghi
  • Molte query reiterate: altre volte non ci sono query molto lente, ma molte query rapide che congiuntamente impiegano molto tempo ad essere completate

Individuazione delle query lente

Andate sulla prima scheda, chiamata DB Queries (query DB) e cercate le query più lente. Il plug-in Debug Objects vi aiuta a farlo evidenziando le query che richiedono più di 0,5 ms con un bordo arancione:

Query lente
Query lente

Sotto la stringa della query potete vedere il nome della funzione che ha effettuato la query. Tuttavia potrebbe essere fuorviante, perché questa scheda mostra soltanto l’ultima funzione dalla pila di esecuzione completa e non sappiamo se questa proviene dal core di WordPress o da uno dei plug-in (o quale plug-in).

Controllare se la query proviene dal plug-in di WPML

Copiate la query lenta (ctrl+C) e selezionate la seconda scheda, chiamata Plugin DB queries (query DB dei plug-in). Potete visualizzare qualche tabella con le query organizzate secondo i nomi dei plug-in e i file dei plug-in tramite cui sono passate. Se il plug-in di WPML ha partecipato nell’esecuzione di questa query, dovrebbe essere elencato nella relativa tabella.

Premete ctrl+F sulla tastiera, quindi premete ctrl+V per incollare la query copiata.

Ciò avvierà una ricerca per ciascuna occorrenza della query selezionata in questa tabella. Probabilmente visualizzerete più di un risultato. Per passare da un risultato all’altro, premete il tasto F3.

Per ciascun risultato di ricerca, controllate se è nella tabella che si trova sotto uno dei plug-in di WPML. Se è vero, scrivete:

  • il nome del plug-in
  • il file dove è stata eseguita la query
  • il numero della linea in questo file (prima colonna nella tabella)

Dettagli della query
Dettagli della query

Query comuni da WPML, altri plug-in e temi

Alcune delle query passano per altri plug-in e/o temi, oltre al plug-in di WPML. Ad esempio, String Translation di WPML fornisce servizi di traduzione per le stringhe che si trovano nel core di WordPress, nel tema e in tutti gli altri plug-in. Se vedete che il plug-in String Translation è presente nell’elenco delle query DB, significa che WPML deve tradurre molte stringhe diverse del vostro sito.

In questo caso, la query che avete trovato lenta si troverà nella scheda Plugin DB queries (query DB dei plug-in) nella tabella sotto il nome del nostro plug-in, ma anche nelle tabelle successive relative ad altri plug-in o nella terza scheda WP Content DB queries (query DB del contenuto WP). Prima di segnalare una query lenta sul nostro forum, fate questo controllo. Se trovate la stessa query nella terza scheda, appuntate il nome del file della terza scheda. Sapremo se un tema specifico è coinvolto nell’esecuzione di questa query lenta e l’identità del tema.

Segnalazione dei risultati sul forum tecnico di WPML

Quando avete appuntato tutti i dati relativi alla query lenta, create un nuovo ticket sul nostro forum e vi spiegheremo il problema. Nel vostro report includete quanto segue:

  • La query lenta e i tempi di esecuzione.
  • Dove/Se potete trovare questa query nella seconda scheda del registro di debug. Se si trova nel plug-in di WPML e, in caso affermativo, i file coinvolti e i loro numeri di riga.
  • Dove/Se potete trovare questa query nella terza scheda, oltre al nome del file e al numero della riga.

Copiate il contenuto di ciascuna scheda e condividetelo con noi utilizzando Pastebin.

Per effettuare questa operazione:

  1. Andate sul forum di assistenza tecnica di WPML e create un nuovo thread. Descrivete il problema relativo alle prestazioni che avete notato e dove possiamo vederlo.
  2. Aprite la prima scheda nei risultati di Debug Objects.
  3. Selezionate i contenuti di questa scheda. Accertatevi di includere tutto da “queries” (query), tra cui la sezione “errors” (errori) e l’elenco completo delle query.

    Selezionate tutte le query
    Selezionate tutte le query

  4. Copiate (ctrl+C) la vostra selezione.
  5. Andate su pastebin.com e incollate (ctrl+V) la vostra selezione nell’area di testo, poi premete il pulsante Submit (Invia).

    Copiate in Pastebin
    Copiate in Pastebin

  6. Copiate l’URL dalla barra degli indirizzi del browser.

    Copiate l'URL di Pastebin
    Copiate l’URL di Pastebin

  7. Copiate l’URL da Pastebin nel thread di supporto.
  8. Ripetete i passaggi da 2 a 6 per i contenuti delle altre due schede.

Ora i nostri supporter sanno a quale sito fate riferimento e quale pagina si carica lentamente. Possono visualizzare un elenco completo delle query in esecuzione e possono aiutarvi a trovare la causa del problema. Se è in WPML vedremo come lavorarci (ed eventualmente migliorare questo aspetto nella versione successiva). Se è nel tema o in altri plug-in, parleremo con gli altri autori e faremo del nostro meglio per far funzionare tutto agevolmente.


Appendice: disattivazione di Xdebug

Xdebug è un’estensione PHP che vi consente di individuare i problemi di codice. Quando viene utilizzato correttamente, vi aiuta anche ad analizzare la fonte dei problemi relativi alle prestazioni.

Quando è in esecuzione, Xdebug aggiunge un carico considerevole al server, perché deve catturare ciò che sta succedendo in tempo reale. Per questo motivo non dovete MAI lasciare Xdebug in esecuzione quando eseguite benchmark delle prestazioni. Se Xdebug è in esecuzione durante la misurazione delle prestazioni, otterrete numeri completamente errati. La maggior parte del carico riportato sarà dovuto a Xdebug e non alla coda che volete utilizzare come parametro.

Il modo corretto di analizzare i problemi relativi alle prestazioni con Xdebug è di eseguire le misurazioni senza Xdebug, ottenere i risultati e poi trovare la fonte del collo di bottiglia delle prestazioni con Xdebug.

Xdebug potrebbe essere in esecuzione sul vostro server anche se non state controllando il suo output. Questo succede spesso quando si attiva Xdebug per il lavoro di debug reale e si lascia caricato, pensando che sia inattivo.

Per accertarsi che sia disattivato, guardate l’output phpinfo().

Xdebug in evidenza nell'output phpinfo
Xdebug in evidenza nell’output phpinfo (negativo per i benchmark delle prestazioni)

Se volete disattivare xdebug, fatelo rimuovendo o disattivando i commenti da php.ini o conf.d/xdebug.ini:

zend_extension=xdebug.so

Rimuovete, non aggiungete la riga soprastante!

Ecco come phpinfo dovrebbe presentarsi quando Xdebug non è in esecuzione:

phpinfo quando Xdebug non è in esecuzione (positivo per i benchmark delle prestazioni)
phpinfo quando Xdebug non è in esecuzione (positivo per i benchmark delle prestazioni)

Non appena non contiene riferimenti a Xdebug, per sicurezza disattivatelo.

Non è importante che altre sezioni di questo file phpinfo contengano o meno riferimenti a Xdebug, purché non vengano mostrate come un’estensione caricata in cima.