Dei consigli da seguire per ridurre il server load di WordPress. Non utilizzando caching e non utilizzando le dovute precauzioni, neppure un server quad core con 8 GB è capace a reggere 16000 utenti unici giornalieri.
L’abbiamo detto più volte e, sebbene ci sia stata una parentesi VIVVO, WordPress è e rimane un ottimo sistema di pubblicazione. I problemi iniziano quando il sito web è trafficato, inizieremo a constatare un notevole aumento del consumo di risorse. E’ a questo punto che entra in gioco l’ottimizzazione altrimenti (tali affermazioni sono dimostrabili), neppure un server quad core con 8 GB di Ram è capace di reggere all “onda d’urto”.
Cosa fare
La prima cosa da fare è controllare il numero di plugins in uso e limitarli all’essenziale. Siamo in grado di trovare un alternativa per il pagination degli articoli ? Ottimo, un plugin in meno, non faremo più uso di WP Page. Siamo in grado di trovare un alternativa per le meta description degli articoli senza far uso di un plugin (vedi: Campi Personalizzati) ? Meglio, significa fare meno queries al database e ciò comporta minor sforzo al processore del server. Tali domande sono da ripetersi per ogni singolo plugin.
Ora che abbiamo controllato i plugins passiamo al tema in uso. Indifferentemente il nostro tema sia premium o non premium dobbiamo controllare il numero di queries al database e ridurle, copiando il codice che vedete in basso e disponendolo prima della chiusura del tag body in footer.php
Ora controllate il codice sorgente della pagina, se è al di sotto delle 50 queries (si tratta di un circa) il tema è ottimizzato altrimenti datevi da fare, 80 queries per pagina sono un infinità e il superamento delle 100 queries significa che, chi vi ha fornito il tema ha creato un “mostro mangia risorse”, pensando alla grafica ma non all’effettivo uso del tema. Assai spesso l’elevato numero di queries nei temi è dovuto al ridimensionamento automatico immagini del plugin TimThumb, pratico ma, nella pratica un “divoratore di risorse”. Esistono comunque plugins peggiori come quelli dei related posts e, lasciandoli con tutte le opzioni abilitate, possono portare (vige il condizionale, i plugins sono tanti) a superare le 100 queries totali al database. Che dire infine dei related posts con le thumbnails ? Dobbiamo mettere in “conto” chiamate al database per estrapolare gli articoli correlati e aggiungere funzionalità di ridimensionamento immagine. A meno che non ne abbiate bisogno, eliminate i plugins related posts con thumbnails che fanno uso di un ridimensionamento immagini, usate invece immagini statiche.
Conclusa questa parte di ottimizzazione passiamo a esaminare le queries nel files single.php, index.php, archives.php controllando sul codex di wordpress che non siano obsolete (http://codex.wordpress.org/Template_Tags). Sostituiamole oppure, ancor meglio, limitiamole. Un esempio, abbiamo nel nostro tema anche il supporto ai commenti di WordPress < 2.7 ? Eliminiamo tutti questi “conditional”, sono uno spreco e un “affronto” all’ottimizzazione, specie se la nostra versione di WordPress è l’ultima disponibile.
E’ giunta l’ora della parte grafica, comprimiamo il nostro CSS tramite i CSS Compressor, basta una semplice query online per trovare un valido CSS Compressor. Inseriamo al suo interno i dati del nostro CSS che li comprimerà, significa minor quantità di dati “spostati” dal nostro server al PC che li richiede. Cerchiamo inoltre di delegare i javascript del nostro tema a Google, diminuirà il server load e dormiremo “sonni beati”. Il link di riferimento è http://code.google.com/intl/it-IT/apis/ajaxlibs/. Concludiamo cercando di utilizzare il plugin gravatars2 per il caching dei Gravatar, sono gli avatar dei commenti, il plugin lo trovate presso http://zenpax.com/. Per Gravatars 2 la motivazione è che, talvolta, i server di gravatar sono “stracolmi di richieste”, aumentando di conseguenza il tempo di caricamento delle pagine con ovvio deterioramento performance server. Ultimo ma non per questo meno importante, utilizzate 1 foglio di stile.
Passiamo alle ottimizzazioni lato server. Iniziamo dicendo che sono richiesti due plugins su WordPress, fondamentali, WP Widget Cache e WP Super Cache. WP Super Cache è per il caching di WordPress, non “potete viverne senza” se il vostro sito web è trafficato, lo stesso senza Widget Cache, che serve al caching dei widget. Entrambi i plugins faranno scendere notevolmente il numero di queries dirette al database, verranno messe in cache sul disco, pronte per essere riutilizzate e ridurre il consumo della CPU del Server. E’ ovvio che il nostro tema debba far uso di Widget per sfruttare Widget Cache ma le risorse e guide esistono, basta leggere http://automattic.com/code/widgets/use/. Ricordatevi infine che Widget Cache è scaricabile da http://wordpress.org/extend/plugins/wp-widget-cache/ , WP Super Cache è disponibili invece all’indirizzo http://wordpress.org/extend/plugins/wp-super-cache/
I server variano, hanno configurazioni differenti ma il primo consiglio si chiama APC, Alternative APC Cache. E’ un estensione PHP per ridurre il server load precompilando, ottimizzando e mantenendo in memoria il codice intermedio associato agli script PHP. Per il download e maggiori info si rimanda a http://php.net/manual/en/book.apc.php. Ulteriori consigli lato server sono “l’arte oscura” dell’ottimizzazione MYSQL, possiamo inserire nel nostro file /etc/my.cnf le linee in basso per aumentare le performance del server. Si tratta in sintesi di un salvataggio delle query di MYSQL nella propria cache di MySQL.
query_cache_type = 1
query_cache_limit = 1M
query_cache_size = 16M
A tutto ciò bisogna aggiungere anche l’eliminazione delle revisioni di WordPress, sono un ulteriore caratteristica da evitare, per mantenere il nostro database “leggero” e performante. Consigliamo la lettura dell’articolo “Rimozione captions, revisions e autosave in WordPress”
E’ il turno del file HTACCESS, migliorare le prestazioni di wordpress significa ridurre anche il numero di volte che viene richiesta un immagine. Se possiamo accedere al nostro file htaccess abbiamo da inserire assolutamente le righe in basso, dicono al server che le richieste alle immagini verranno depositate dal “client” in locale, durata massima 1 settimana. Ciò riduce sicuramente il carico del server, se i nostri visitatori sono giornalieri e il nostro sito web è assai conosciuto. Per maggiori informazioni su “tweaks” htaccess si rimanda a http://www.askapache.com/htaccess/speed-up-your-site-with-caching-and-cache-control.html
<FilesMatch “\.(jpg|jpeg|png|gif|swf)$”> Header set Cache-Control “max-age=604800, public” </FilesMatch>
Concludiamo ricordando che questa guida non è perfetta, sono consigli di partenza, per capire che il lavoro di ottimizzazione di WordPress non equivale a l’installazione di un semplice plugin per la cache .. Si tratta comunque di consigli già sperimentati e funzionanti al 100%, quindi riproducibili e usabili per migliorare le performance del proprio server – installazione di WordPress.
Dimenticavamo, effettuare il redirect del feed ! Vedi Effettuare il Redirect del feed di WordPress su FeedBurner (WordPress FeedBurner Plugin)
Leggi anche: Migliorare le Prestazioni di WordPress – Parte 2
Salve,
sto realizzando un blog con wordpress ed ho provato ad effettuare la prova del numero di query eseguite dal blog e leggevo sul tuo post che un numero di 50 queries per un blog wp si deve ritenere anche troppo elevato.
Allora mi chiedo comè possibile che dopo aver scaricato l’ultima versione di wordpress 2.9.2 se eseguo il test numero di query con il semplice tema di default fornito da wp, mi risultano 200 query??? a questo punto mi chiedo comè possibile ridurre le query se già il tema base di default è cosi pesante? stavo pensando che forse wordpress con l’avanzare delle versioni aggiunge sempre piu plugin di default e quindi già un tema default è super ottimizzato e quindi già pesante, possibile?
Impossibile che il tema di default superi le 200 query, hai omesso info importanti come i plugins installati. Prova a rimuovere plugins dalla tua installazione wordpress e,come per “magia” si ridurranno il numero di query.. :)
Perdonani ma non riesco a capire questa parte:
“Cerchiamo inoltre di delegare i javascript del nostro tema a Google, diminuirà il server load..”
Grazie
Ci si riferisce all’inserimento in functions.php del codice
if( !is_admin()){ wp_deregister_script('jquery'); wp_register_script('jquery', ("http://ajax.googleapis.com/ajax/libs/jquery/1.4.1/jquery.min.js"), true, '1.4.1'); wp_enqueue_script('jquery');}
Questo è un esempio di “delega”. Non carichi più il js jquery dalla tua installazione di wordpress, la carichi dal google repository, ciò dovrebbe diminuire il tempo di caricamento
Illuminante: nonostante abbia sempre cercato di limitare caricamenti pesanti e plugin inutili non avevo minimamente idea che anche i temi potessero influenzare il carico: hai qualche articolo da suggerire e tema da consigliare?
Grazie per la risposta e per l’articolo!
p.s . mi permetto di consigliarti Comment Notifier, per non essere costretto a ricordarmi di controllare la tua risposta :)
Grazie per il commento. Diciamo che il tema è tutto, è il secondo passo dopo aver fatto “ordine con plugins ma anche il proprio server”.
Un consiglio ? Sarò onesto, in oltre 5 anni d’utilizzo di WordPress non ho ancora visto guide esaurienti che sappiano rispondere alla tua domanda, mi limito a segnalarti il codex, fondamentale per capire a fondo l’utilizzo dei template tags, rimuovendo il superfluo. Last but not least, ti invito a provare anche Google PageSpeed : “Google aiuta ad ottimizzare i siti con Page Speed“. Google PageSpeed è fondamentale, la velocità di caricamento delle pagine è tutto al giorno d’oggi.
Segnalare un tema ? Il miglior tema è un tema di puro CSS, senza l’inclusione di immagini.
Non è in programma l’aggiunta di alcun plugin per seguire i commenti, esiste per questo già il feed RSS dei commenti. Qualora venga richiesto da altre persone, prometto che verrà inserito in tempi brevissimi.
Ottima guida, ottimizzare il proprio sito e senza alcun dubbio una fase piuttosto lenta credo, pianopiano si apporatno modifiche e cercando di migliorare le prestazioni. Probabilmente per un webmaster che mastica ogni giorno html e gestioni database sicuramente impiegherà pochissimo tempo. Ma per chi come me è un amatore le cose si complicano un bel pò. Cmq ti faccio i compòlimenti per l'articolo che ritengo sia un bel punto ferlo per l'ttomizzazione di un blog. Speriamo che rieco ad ottimizzare al megli oi lmio sito.
Ciauz
Grazie mille. Se hai bisogno di qualcosa o non hai capito qualche passaggio, lascia un commento. Sappi che è in arrivo la “seconda parte”, riguardante htaccess e apache entro breve :)