Come capire quali plugin rallentano WordPress con P3 e cosa fare dopo
Hai un blog WordPress lento e non capisci come mai? Magari dai la colpa all’hosting quando invece il tuo è uno tra i migliori hosting per WordPress? Ma se prima andava tutto bene, cosa è cambiato ora?
Il numero plugin installati!
Troppi plugin, soprattutto se hanno un codice non ottimizzato, possono rallentare il tempo di caricamento di WordPress, anche in maniera considerevole! E visto che la velocità di caricamento di un sito è importante, devi limitare questo problema! Ma come fare a capire quali sono quelli che effettivamente vanno ad impattare sul tempo di caricamento?
Basta utilizzare il plugin P3 (Plugin Performance Profiler) realizzato da GoDaddy.
P3 (Plugin Performance Profiler)
Questo plugin è davvero favoloso, tramite l’auto-scan simula X visite provenienti dal tuo indirizzo IP e analizza N pagine del blog, dalla home, agli articoli, alle categorie, ma anche la bacheca, la pagina plugin e il backend in generale, così da testare l’impatto effettivo che hanno i plugin rispetto al tempo di caricamento di ciascuna pagina analizzata.
È possibile personalizzare le pagine da analizzare, così da poter paragonare i risultati ottenuti, sfruttando questa funzione (da aggiungere nel file functions.php del tema):
[php]
function my_p3_auto_scan_pages() {
return array(
‘http://example.com/’,
‘http://example.com/some-cool-post’,
‘http://example.com/wp-admin/edit.php’,
);
}
add_filter( ‘p3_automatic_scan_urls’, ‘my_p3_auto_scan_pages’ );
[/php]
L’importante è disattivare i plugin di cache, come W3 Total Cache, prima di iniziare il test.
I tuoi dati
Non voglio annoiarti ulteriormente, per cui passiamo subito alla pratica.
Una volta installato il plugin, vai su Strumenti > P3 Plugin Profiler e premi il pulsante Start Scan. Dopo circa un minuto, in cui il plugin eseguirà le analisi, clicca sul pulsante View Results e vedrai finalmente quale plugin rallenta consistentemente il tuo blog. Come? Sotto forma di una bella torta a spicchi, immediata e pratica!
Andando con il mouse sopra ogni spicchio, vedrai esattamente il nome del plugin, l’impatto in percentuale tra tutti i plugin attivi ed il tempo impiegato a caricare il codice del plugin stesso.
Dalla mia analisi risulta che ho installato 21 plugin (secondo me un buon risultato è averne attorno ai 15), che impiegano 0.711 secondi a caricare tutto il loro codice, con un impatto sul tempo di caricamento del 63.4% (percentuale troppa elevata!) e un numero di query al database pari a 84 (troppe, pensa che con solo WP si hanno circa 30 query).
Situazione migliorabile, sicuramente!
Oltre a questa prima carrellata di informazioni, P3 mette a disposizione altri dati interessanti.
Nella sezione Simple Timeline, viene mostrato il grafico del tempo speso nelle varie pagine analizzate per: il core di WordPress (solo il codice di WP), il tema e i plugin.
Risulta evidente che i plugin rallentano complessivamente il caricamento del blog. Guarda come sarebbe veloce se non installassi nessun plugin!
Nella sezione Advanced Metrics vengono mostrati nel dettaglio i tempi di caricamento e altre informazioni interessanti.
Ecco alcuni valori medi che dovresti analizzare per bene:
- Site Load Time: tempo “reale” di caricamento del blog (comprende anche il tempo dei plugin), da quando viene fatta la richiesta a quando viene consegnata al browser l’intera pagina web senza contare dell’overhead introdotto da P3 (secondo me non è realistica se comparata con i servizi online come Pingdom Tools e GTmetrix)
- Plugin Load Time: tempo impiegato a caricare il codice dei plugin
- Theme Load Time: tempo impiegato a caricare il codice del tema
- Number of PHP ticks: numero di dichiarazioni php e chiamate a funzioni php
- Memory Usage: memoria RAM utilizzata
- MySQL Queries: numero di query effettuate al database
Per tutti questi valori, più bassi sono, meglio è!
Come accennato, il tempo di caricamento del sito non rispecchia quello misurato con Pingdom, che è invece di 3.67 sec:
Nota che tutti i valori che ti ho mostrato sono sempre soggetti ad errore, quindi non prendere i risultati come corretti al 100%.
Analisi e possibili soluzioni
È arrivato il momento più bello ed interessante, quello di analizzare i risultati ottenuti 🙂 L’approccio che utilizzo solitamente è quello di partire dall’alto per poi scendere (approccio top-down), ovvero da chi ha un maggior impatto a chi è quasi irrilevante.
Partendo dal primo grafico (a torta) ho notato che il maggior impatto lo hanno i seguenti plugin:
- 17% Other (tutti i plugin che non sono presenti nella lista)
- 15% Pretty Link Lite
- 11% Special Recent Posts Free Edition
- 10% WordPress SEO
- 9% SyntaxHighlighter Evolved
- 7% Smart Archives Reloaded
- 7% WordPress Database Backup
- 6% Simply Exclude
Pretty Link Lite è il plugin che utilizzo per accorciare gli URL e dare un aspetto migliore agli URL delle affiliazioni. Per me è fondamentale, quindi non posso eliminarlo. Posso sostituirlo con un altro simile? Beh, dovrei riuscire ad importare nell’atro plugin tutti i link e non ho voglia 🙂 Quindi?
Quindi ho pensato bene che era giunto il momento di aggiornare il plugin (perchè c’era un aggiornamento disponibile) e con mia grande sorpresa:
Come puoi vedere, grazie all’aggiornamento (ho letto che sono state ottimizzate le richieste al Database) il tempo di caricamento del plugin è passato da 0.1043 a 0.0691 secondi, con un miglioramento di 0.0352 secondi. Vedi che è importante aggiornare plugin e WordPress?!? 🙂
Special Recent Posts, che ha un impatto del 11%, lo utilizzo per mostrare gli ultimi 5 articoli con l’immagine di anteprima. Ne posso fare a meno? Sì. Ho così creato a mano il codice per ottenere lo stesso risultato, riducendo notevolmente il codice da caricare.
WordPress SEO è l’ottimo plugin che utilizzo per la SEO di questo blog, non posso farne a meno perchè è il migliore nel suo campo.
SyntaxHighlighter Evolved che ha un impatto del 9%, mi serve per mostrare il codice che ogni tanto fornisco all’interno degli articoli. Posso farne a meno? No. Posso sostituirlo? Sì.
Ho fatto diversi test, ed ho trovato in Syntax Highlighter Compress una buona alternativa, ottimizzato e molto più veloce (nonchè più pratico). Piccolo problema: dovrei modificare il codice di tutti i codici che ho già inserito negli articoli, oppure modificare il codice del plugin (soluzione più veloce), ma mi ci vuole parecchio tempo per analizzare il codice del plugin.
Morale della favola? Al momento lo lascio ancora attivo.
Smart Archives Reloaded è il plugin che utilizzo per creare la pagina archivio, dove mostro tutti gli articoli che ho pubblicato qui. Ha senso avere un plugin per una sola pagina? In questo caso no, infatti l’ho sostituito con del codice, come ho descritto nell’articolo Creare una pagina archivio senza plugin.
WordPress Database Backup è il plugin che utilizzo per creare il backup automatico del mio database. Solitamente, i plugin che fanno qualcosa di programmato (in questo caso il backup) possono rallentare maggiormente il caricamento del blog. Probabilmente questo plugin non è ottimizzato, così mi rallenta notevolmente il caricamento. Ho deciso di eliminarlo e di sfruttare il backup automatico che mi fornisce il mio hosting. Puoi anche utilizzare il plugin WP-DBManager.
Simply Exclude è il plugin che utilizzo per non mostrare alcuni articoli nel blog. L’ho rimosso ed ho modificato manualmente le query che mostrano gli articoli in homepage, escludendo particolari categorie.
Insomma, ho continuato l’analisi per tutti gli altri plugin ponendomi sempre le tre domande:
- È fondamentale?
- Posso sostituirlo con del codice scritto a mano?
- Posso sostituirlo con un altro plugin (migliore)?
Se la risposta è no, passo alla domanda successiva, fino a che non finiscono. Se al termine la risposta è ancora no, lascio il plugin lì dov’è.
Dati dopo le modifiche
Ecco i dati che ho estratto dopo aver ottimizzato (a grandi linee) il blog:
Il numero di plugin installati è passato da 21 a 16 (ho fatto una bella pulizia :)). Il tempo di caricamento dei plugin da 0.711 secondi è sceso a 0.453 secondi. L’impatto dei plugin è passato da 63.4% al 40.9% con 6 query richieste al database in meno.
Il tempo di caricamento del sito è passato da 1.12 a 1.10 (non è ciò che mi aspettavo, pensavo in una diminuzione maggiore). Il tempo di caricamento del tema è diminuito ma senza che io abbia modificato qualcosa, mentre è aumentato il tempo di core di WP, che in teoria dovrebbe rimanere sempre uguale. Da questo si capisce che P3 non è proprio affidabile al 100% (ovviamente), ma bisogna utilizzarlo per trovare chi rallenta il blog a grandi linee, senza fossilizzarsi sui millisecondi.
L’utilizzo della memoria RAM è sceso, da 46.65 MB a 39.74 MB, circa il 15% in meno, così come il numero di query che sono passate da 84 a 78.
Così a prima vista il tempo di caricamento totale è diminuito di poco, ma ti assicuro che nella realtà è diminuito moltissimo! Anche il backend (il pannello di amministrazione) risponde in maniera molto più veloce.
Penso che il plugin P3 non mostri il reale tempo di caricamento, per cui ho effettuato dei test anche con il servizio di pingdom tools.
Anche questo servizio è molto variabile, per cui i dati vanno presi con leggerezza. In ogni caso, rispetto all’inizio, il tempo di caricamento è diminuito da 3.67 sec a 3.40 sec, circa l’8%. Il numero di richieste è diminuito, passando da 77 a 60, mentre è aumentata la dimensione della pagina, da 1.6 a 2 MB (non mi spiego il perchè). Infine il giudizio di Pingdom è aumentato, da 85 a 89.
I risultati mostrano che guadagno pochi decimi nel tempo di caricamento, ma, come ho già detto, nella realtà il blog risulta molto più performante, anche nel backend.
Il mio consiglio finale è di non essere ossessionati dai risultati prodotti con P3, in quanto non lo ritengo preciso, piuttosto di utilizzarlo per avere un’idea generale di quale plugin stia rallentando il tuo blog… ah, dimenticavo, ovviamente mantieni solamente i plugin indispensabili per te!
Per chiudere, cosa ne pensi se disattivassi i plugin nelle pagine in cui non servono? Interessante vero? Magari, settimana prossima… … … 🙂
08/02/2013 alle 14:58
“Special Recent Posts, che ha un impatto del 11%, lo utilizzo per mostrare gli ultimi 5 articoli con l’immagine di anteprima. Ne posso fare a meno? Sì. Ho così creato a mano il codice per ottenere lo stesso risultato, riducendo notevolmente il codice da caricare.”
Un piccolo articolo?
08/02/2013 alle 16:25
Certamente, è in laboratorio 🙂
L’ho finito, ecco qui: Mostrare gli articoli recenti con l’anteprima senza plugin.
08/02/2013 alle 16:41
L’ho provato….il 50% del rallentamento è fatto da No category parents….come faccio ad eliminarlo senza perdere i vantaggi SEO?
Help me!
11/02/2013 alle 15:28
WordPress SEO ha questa funzione integrata,
in alternativa, aggiungi questo codice al file .htaccess (fai una copia di backup prima):
RewriteRule ^category/(.+)$ http://www.yourblog.com/$1 [R=301,L]
12/02/2013 alle 09:39
Ho All in SEO, quindi devo fare le prove con .htaccess
12/02/2013 alle 14:42
ok, pare che non ci sia nessuna anomalia….mi chiedo come faccio a verificare che sia tutto ok? devo aspettare la prossima pubblicazione di post e verificare?
12/02/2013 alle 16:12
Prova ad andare a vedere una categoria… in ogni caso, non ci dovrebbero essere problemi.
08/02/2013 alle 17:39
Ottimo, alcuni risultati:
DA —————————
Total Plugins: 24 (currently active)
Plugin Load Time 0.546 (sec. per visit)
Plugin Impact 59.9% (of page load time)
MySQL Queries 152 per visit
A ——————————
Total Plugins: 22 (currently active)
Plugin Load Time 0.386 (sec. per visit)
Plugin Impact 53.3% (of page load time)
MySQL Queries 130 per visit
Thank you..
12/02/2013 alle 19:34
e invece no automotivespace.it/eng/category/auto/
mentre questa è la riga che ho inserito
RewriteRule ^category/(.+)$ http://www.automotivespace.it/eng/$1 [R=301,L]
Forse che la devo mettere alla fine o all’inizio?…oppure devo solo modifiare il file htaccess in .it e non solo in .it/eng?
13/02/2013 alle 13:58
Ti confermo che dovrebbe funzionare così. Mettilo pure nel .htaccess in .it/eng . Se non dovesse andare, prova a svuotare la cache plugin+browser (anche se non dovrebbe cambiare niente) e infine, prova ad inserirlo nel .htaccess del .it
14/02/2013 alle 15:11
FUNZIONA!
Il codice che mi hai segnalato fa la sua funzione, ma SOLO se lo metto come prima istruzione in .htaccess.
GRAZIE
Ora i miei dati sono
Total Plugins:
34
Plugin Load Time
0.847
Plugin Impact
68.5%
MySQL Queries
86
Lo so è ancora molto, ma piano piano sto cercando di eliminare quanto più è possibile con le tue guide….;)
15/02/2013 alle 18:20
Non c’è mica fretta 🙂
04/03/2013 alle 21:01
Ciao Roberto, io us WordPress database Backup, ma i miei backup li faccio manualmente, cosi quando non mi serve, disattivo il plugin.
La mia domanda è, ma se il plugin è disattivato, questo incide lo stesso nella velocità, o dal momento che è disattivato non incide più sulla velocità di caricamento della pagina?
Grazie!
05/03/2013 alle 14:22
Non incide sulla velocità perchè non viene caricato nulla 🙂 Però ogni plugin potrebbe essere una porta d’accesso per i malintenzionati (è un po’ estrema come cosa, ma è così)
15/05/2013 alle 23:17
Davvero illuminante, il plugin per plugin…ottimo! Ho capito chi mi faceva perdere più tempo. Grazie infinite
16/05/2013 alle 14:00
Ottimo 🙂
06/06/2013 alle 23:35
il plug in più che rallenta tutto è traslate. mi rallenta dell’80%. ma è indispensabile. come faccio?
07/06/2013 alle 15:47
A cosa ti serve? Lo devi sapere te se è indispensabile per il tuo blog 🙂 Pensaci su e poi decidi…
07/06/2013 alle 20:19
Ho un ristorante e un albergo quindi mi serve il multilingue, ho chiesto consiglio a un amico esperto e mi ha linkato il tuo articolo su qtraslate.
Devo dire che in un sito complesso come il mio è molto utile perche non mi obbliga a tradurre tutto (certe cose come la scuola di cucina o come articoli e commenti) sono piu utili solo agli Italiani. Da parte mia risparmio tempo. Sto leggendo tutti i tuoi articoli piano, piano tempo permettendo trovandoli molto utili. Ma quando ho visto i risultati di qtraslate +4 secondi e un ritardo dell’80% sul resto ci sono rimasto male. Anche perchè come puoi ben immaginare essendo un ristorante è fatto più da immagini che da testi, e le immagini devono essere belle e grandi. Ho istallato anche, seguendo i tuoi consigli: All In One SEO Pack, W3 Total Cache, WP Smush.it. accorciando di molto i tempi di reazione. Grazie comunque per il tuo lavoro, in genere tranne qualche problemuccio avuto per colpa di register.it che è un po strano, le tue indicazioni sono precise anche per chi fa solo il cuoco.
12/06/2013 alle 17:53
Grazie a te Marco 🙂
08/06/2013 alle 23:52
Quando clicco sul START SCAN non succede niente 🙁
come mai?
12/06/2013 alle 17:47
Non saprei, prova a chiedere all’assistenza del plugin… magari hai javascript o qualcosa del genere disattivato