Quando si ottimizza un sito in WordPress si possono notevolmente incrementare le prestazioni andando ad ottimizzare, almeno a livello base, le query SQL che vengono eseguite. In linea di massima c’è da dire che non sono molti i siti che richiedono questo genere di intervento: per capire se sia il vostro caso potete ricorrere a questo semplice snippet di codice che va a conteggiare il numero di query eseguite ed il tempo necessario ad eseguirle.
Codice da inserire nel tema:
<?php echo $wpdb->num_queries; ?> <?php _e('queries'); ?>. <?php timer_stop(1); ?> <?php _e('seconds'); ?>
Esso deve essere inserito, per la cronaca, all’interno del file footer.php del tema che state utilizzando,e mostrerà il numero di query SQL necessarie per visualizzare la pagine ed il tempo necessario a compiere il lavoro. Valori tipici potrebbero essere, ad esempio, mediamente fino a 50-60 query eseguite in massimo 2-3 secondi, ma questi valori possono cambiare di molto a seconda del blog, e non sono da considerarsi realmente indicativi, di per sè. Resta il fatto che per un visitatore può essere seccante o controproducente dover attendere il caricamento di una pagina per diversi secondi, e per questo motivo può essere necessario prendere dei provvedimenti che permettano di ridurre il carico di lavoro sul server SQL qualora i secondi diventino ad esempio 8-10 (o addirittura di più).
Chiaramente il numero di query dipende prevalentemente da quello che il tema richiede all’interno della pagina: ogni singolo accesso al database impiegherà del tempo che, accumulandosi, potrebbe essere causa di problemi di lentezza del sito oppure, in certi casi, provocare dei veri e propri timeout sul server. La cosa importante in questi casi è avere la pazienza di analizzare tutte le sezioni critiche del codice del tema, e cercare di ridurre il carico di lavoro necessario, eventualmente eliminando porzioni non strettamente necessarie di codice.
Il core del problema solitamente è annidato in sezioni del genere:
<div class="entry"> <?php the_excerpt(); ?> </div> <div class="postmetadata"> <p><?php the_tags( 'Tags: ', ', ', ' | ' ); ?></p> </div>
Anzitutto, ammesso che il layout permetta di farlo senza risultare sgradevole all’utente, è possibile sostituire il comando
the_excerpt()
con
the_content()
Si tratta quindi di visualizzare l’intero articolo invece di un suo estratto, dato che quest’ultimo è computazionalmente più costoso del primo. Nella pratica sembra che questo permetta di ridurre di una ventina di query il numero di operazioni SQL necessarie (fonte). Altra cosa da tenere in considerazione è l’istruzione che genera i tag dell’articolo, i quali – specialmente quando sono numerosi – possono impiegare un tempo notevole ad essere mostrati: in questi casi possiamo sostituire
the_tags
con una funzione ottimizzata come descritto.
<?php function the_tags_opt(){ $posttags = get_the_tags(); $count=0; if ($posttags) { foreach($posttags as $tag) { $count++; if ($count <= 3) { echo $tag -> name . ' '; } } } } ?>
L’ottimizzazione di query SQL in generale è molto complessa e non può certamente essere riassunta in un singolo articolo, il quale può comunque servire da linea guida generale e che va applicato con molta attenzione (possibilmente, in fase di prova, solo su una copia del sito in locale). Il monitor visto all’inizio può essere sostituito con un plugin WordPress che serve esattamente ad effettuare il database profiling, e che potete scaricare all’indirizzo indicato anche se, ovviamente, bisogna fare molta attenzione perchè non è aggiornatissimo e non è detto che funzioni con WordPress recenti.