Premettendo che non mi ritengo un esperto di PHP/MySQL/Sistemi, cerco di spiegare alcune caratteristiche instrinseche di drupal, grazie alle mie conoscenze e alla mia esperienza.

Ce ne ho messo di tempo, ma finalmente ho raggiunto una discreta conoscenza del funzionamento della cache in drupal. La scarsa documentazione sull’argomento non mi ha certo aiutato, e a me pare più una scienza vodoo che la caratteristica più importante di un sito realizzato con Drupal.

Urge quindi una spiegazione: Cos’è la cache? Spero che tutti sappiano che drupal inserisce in quattro tabelle i dati HTML delle pagine compressi in (gzip?): cache, cache_filter, cache_menu, cache_page. Ognuna memorizza una parte diversa del sito.

Su Altervista, invece, la cache non funziona. Come mi diceva TheCrow, Altervista effettua una compressione delle pagine tramite la mod_gzip e drupal fa una cache non dell’HTML, bensì dell’output gzippato. L’output a pagina quindi sarà un flusso gzip non decompresso, che risulta in caratteri incomprensibili (Firefox) e il download di un file (Internet Explorer). Una patch recentemente rilasciata potrebbe andare a risolvere il problema. Questa rileva mod_gzip e decomprime l’output prima di inserirlo nella cache.

Tornando alla questione della performance di un sito Drupal, la cache ha un timelimit expire. Cioè, se impostata ad esempio a 5 minuti, qualunque contenuto inserito/modificato non andrà a modificare la cache, finchè non sono passati 5 minuti dall’ultimo inserimento/modifica nel DB. Quindi ad esempio se un utente anonimo (gli unici di default, ad usare la cache), inserisce un commento, lo vedrà dopo 5 minuti. Impostata a 0 (Nessun timelimit), ad ogni aggiornamento/inserimento/modifica di un nodo/commento verrà ricostruita la cache. Questo ha creato in alcune installazioni, gravi problemi di stabilità del sito, a causa del numero enorme di query che andavano a inserire nel db i dati compressi.

Quindi usate la cache Normale e possibilmente la compressione dei CSS. La cache aggressiva è molto più performante ma è incompatibile con tutti i moduli che vanno a modificare l’HEAD, aggiungendo ad esempio css, script, xml ed altro. La compressione CSS è utilissima, e consente di accorpare tutti i css usati in uno solo, compresso (senza \n, commenti, etc.). Una nota: la compressione dei CSS funziona solo se avete impostato il trasferimento dei file a pubblico :)

Qualche link interessante su cui discutere (magari sul vostro blog, o nei commenti):

Drupal Cache Performance Module List Static Page Caching for Drupal 4.7 (aggiornabile alla 5) Status update on Drupal.org performance issue Optimize mySQL

Al prossimo post sulla Cache e sulle performance di Drupal :D