Minimizzare tempo di caricamento di wordpress

Come si sa WordPress macina molto come numero di queries e come ravanamento nella struttura del CMS, se lasciato cosi com’è appena installato (senza migliorie) può tranquillamente raggiungere i 15 secondi per caricare una pagina.

Innanzitutto rispondiamo alla semplice domanda: “perchè minimizzare il caricamento delle pagine?

  1. Perchè gli utenti si possono stufare ed andare via (navigabilità*)
  2. Perchè si è penalizzati nei motori di ricerca

Che tempo dovrebbe avere un sito ottimale?

  • Sotto i 2 secondi e mezzo di risposta il sito ha una buona risposta
  • Sotto i 5 secondi è mediocre
  • Sopra i 5 secondi è sicuramente penalizzato in serp e stufa la navigazione agli utenti (la penalizzazione c’è, ma comunque non dovrebbe essere importantissima)

Teoricamente da cosa dipende il tempo di risposta del sito?

  1. Dalla potenza del server web (Apache http server di solito): spesso coincide con i valori di cpu e la configurazione corretta dello stesso
  2. Dalla potenza del database (mysql di solito): può, anzi dovrebbe, risiedere su un server diverso, spesso coincide con la potenza fisica del server, i valori delle risorse dedicate e il settaggio ottimizzato.
  3. Dal software utilizzato (WordPress in questo caso): influisce in molte cose descritte sotto.
  4. Da dove fisicamente risponde il server e dalla localizzazione dei dns: richiamando un dominio dall’Italia questo si converte in ip e si reindirizza la chiamata al server; per far un esempio di solito il tempo medio di risposta italia-italia è di 15 ms, italia-olanda 25 ms, italia-ameria >400 ms (è gia quasi mezzo secondo perso ad ogni pagina visitata).
  5. Quanto pesa virtualmente la pagina da visualizzare, le immagini, le risorse e la velocità di connessione del server (upload).
  6. Cose utente, metodo di connessione, velocità di connessione (download), dns utilizzati (ad esempio quelli di alice sono spesso intasati, la controprova è quando si gioca online con la playstation).

Teoricamente cosa può cambiare il tempo di risposta di wordpress?

  1. Comunicazione con il database:
    1. numero di post, pagine, articoli, ecc aumentano la complessità delle query(ad esempio le join).
    2. ottimizzazione con indici e applicazione di qualche strategia sulle query più usate e più pesanti (oltre all’ottimizzazione del server trattato prima).
  2. Comunicazione con i file e struttura php:
    1. File e valori db interni richiamati nel passaggio: WordPress ha una struttura molto complessa in termini di dove va materialmente a pescare le cose, ad esempio dopo una chiamata di u post, questo carica non la pagina intera ma le sottosezioni a vari step(ad esempio un widget è materialmente una query). Troppe cose ove inutili rallentano (se un widget è un testo statico val la pena riportarlo in un file invece che come widget wp).
    2. WordPress hooks: (spiego la perdita di prestazioni più gettonata con un esempio) spesso per aggiungere un banner pubblicitario dopo ogni post, non lo si inserisce sull’html. Si preferisce installare un plugin (che la sua esecuzione deve essere inclusa in più dopo ogni chiamata), che non fa altro che dire “chiama dal mio file xxx.php la mia funzione xxx() quando arriva il momento di richiamare il contenuto del post”(che è una cosa da fare in più invece della nomale lettura), per fare infine una query al db che risponde il codice del banner che si è inserito da backend (una query in più).
  3. Il peso di tutti i dati che si tornano al pc utente: tanti plugin aggiungono tag html inutili che aumentano la dimensione, tanti commenti nell’html aumenta la dimensione, utilizzare immagini non ridimensionate pure, immgini in formato non idoneo al web pure, plugin che fanno liste o quant’altro (esempio l’archivio) possono diventare armi a doppio taglio perchè è più il loro html che quello necessario, ecc.

In pratica, in finale finale, somatizza.. che si dovrebbe fare per farlo andar più veloce?

  1. Evitare sprechi: plugin non necessari toglieteli.
  2. Evitare giri inutili nell’html: aprite il sorgente html e tutto quello che è inutile all’utilizzo si toglie (commenti inutili, tag che non hanno utilizzo, contenuto rindondante, html utile ma che può essere sintetizzato come tutto ciò che basterebbe riportare nel file robots.txt).
  3. Appoggiarsi su di un server con un buon tempo di risposta.
  4. Appoggiarsi in un hosting o un server che non ha il db intasato che fa da collo di bottiglia (come spesso accade negli hosting).
  5. Usare una cache per le pagine in risposta, io ad esempio uso wp-super-cache che è pericoloso ma ottimo.
  6. Integrare cache per parti scoperte, come può esser utile wp-widget-cache (dipende se i widget sono spesso statici o direttamente dipendenti dai post, e magari se il numero di pagine della cache normale è molto alta)
  7. Integrare ove necessario cache per chiamate db, ad esempio db-cache, per risolvere problemi di hosting pietosi o quando si usa worpress per offrire un sito statico o non iterattivo.
  8. Compattare gli spazi rindondanti in html, javascript e css: ci sono plugin come wp-minify che sono molto utili.
  9. Richiamare file js comuni da server esterni per maggior risposta e parallelizzazione della chiamata (configurare le opzioni di all-in-one-seo dedicate)
  10. Ottimizzare il db per lo meno togliendo revisioni e quant’altro, per lo meno utilizzare ogni 3-6 mesi le funzionalità basi di wp-optimize.
  11. Imparare ad utilizzare gimp e sperimentare come pesano di meno le immagini, le versioni, ecc.
  12. Utilizzare layout puliti con poche immagini che si appoggiano prevalentemente su regole di stile.
  13. Evitare l’utilizzo di template da bimbominchia che hanno 35 mila cose configurabili, saranno tutte aggiunte di “if” nel template, chiamate al db per aggiungere una righetta ecc.
  14. Evitare di approfittarsi troppo degli hooks, ad esempio il banner metticelo nel template (imparane la struttura prima magari), evita l’utilizzo di plugin come le aggiunte di social o di pulsanti mi piace, aggiungili nel template ricavati dai siti originali.
  15. Evita di appoggiarti su server esterni, ad esempio io noto che con 2 pulsanti di facebook per pagina, questo mi rallenta il caricamento. Idem per affiliazioni con  server scarsi.
  16. Se hai possibilità di scelta nella connessione al db, sappi che spesso vengono offerte best-effort che materialmente sono girano attorno ai 2 megabit, condivisi e malconci. Utile è un collegamento garantito a 10 megabit (non tanto perchè è gran più veloce con 1 utente, ma è utilissimo in caso di multiutenza parallela). Cambia molto avere un collegamento a 100, veramente tanto, provare per credere.
  17. Ultimo ma per primo: eliminare widget schifosi ed inutili, se hai un blog e hai il classico widget archivio che sputa fuori in un menu a tendina 12 mesi all’anno di 5 anni di articoli.. pensi che all’utente serva? che qualcuno ci clicchi mai? che non aumenti sproporzionatamente il peso? L’unico dubbio che ho è se pesa più il numero di elementi in lista o più l’html che serve a decoratore che viene creato.. Una volta che invii a google la sitemap con gli archivi se a posto, non ha altra utilità su siti normali (poi dipende da sito a sito).

Qual’è la parte più importante nell’ottimizzare wordpress a mio parere?

Tutte sono importanti chiaramente, per ottimizzare al meglio lo si fa su tutte (100ms per ogni cosa fa più di un secondo in totale).

Chiaramente non è mai possibile ottimizzare tutto, vuoi che il db non si possa toccare, vuoi che non si hanno le competenze, vuoi che non si voglia spenderer per un server migliore, l’importante in finale però è star sempre sotto i 5 secondi, spesso è conveniente esser tra i 3 e i 5 (per un sito non giovane e con discreto numero di contenuti .. non è facilissimo). L’ideale è star sotto i 2 secondi (a mio parere su questa cifra si ottengono discreti privilegi in serp).

Se devo scegliere cosa per forza bisogna ottimizzare tra le tante come fanno i bambini e metterle in scaletta, cosa sceglierei? Non che sia una domanda da tenere tanto in considerazione, ma se proprio devo scegliere direi il database, per lo meno assicurarsi che tra ottimizzazione, configurazione e potenza fisica.. risponda velocemente perchè wordpress per me è 80% query al database. Come seconda cosa chiaramente dico eliminarecose inutili, che alla fine equilvale a dire numero di query. Come terza direi semplice utilizzo di cache. Il resto (come appunto la potenza server) per me non è proprio fondamentale .. purchè risponda almeno “decentemente” in velocità.

 

* navigabilità per chi ha un mac, è come il vostro termine “fluidità” con il quale sono 15 giorni che mi scassate i maroni :).
Si, l’ipad è fluido si, ops.. non lo sapevi che è uscito il rivoluzionario displaya retina con 3 banane e la ram saldata sulla scheda madre? Torna a spendere migliardi per il display a retina che è ancora più fluido del tuo mac!