12612 Letture

Velocizzare Joomla: come attivare la cache e "cronometrare" le query SQL

Nell'articolo Aggiornare Joomla 1.5 a Joomla 2.5: come migrare i dati senza perdere nulla abbiamo presentato una serie di metodologie che consentono di effettuare una migrazione da Joomla 1.5 a Joomla 2.5 senza incorrere in problemi e senza spendere troppo tempo in operazioni di debugging e verifica.

Nel caso di Joomla, così come di qualunque altra piattaforma per la gestione dei contenuti (CMS, Content Management System) assume un'importanza a sé il capitolo dedicato all'ottimizzazione delle prestazioni.

Velocizzare Joomla, soprattutto se si ha a che fare con un sito web di dimensioni notevoli, può risultare una procedura tutt'altro che semplice da svolgersi. Dopo aver correttamente installato e configurato Joomla (nel nostro caso ci concentreremo su Joomla 2.5), uno degli interventi che solitamente dà i migliori frutti consiste nell'abilitazione del meccanismo di caching lato server.


Joomla 2.5 supporta l'uso della cache conservativa e della cache progressiva: nel primo caso gli elementi che sono oggetto dell'operazione di caching sono in numero più limitato mentre, optando per la cache progressiva, nettamente più "aggressiva", Joomla memorizzerà in cache tutti gli elementi, moduli inclusi. Di solito, l'utilizzo della cache progressiva viene consigliato per i siti web di dimensioni medio-piccole.
L'attivazione della cache può essere richiesta dal pannello di amministrazione di Joomla 2.5.

Il primo passo da compiere, tuttavia, è verificare - cliccando sul menù Sito, Informazioni di sistema quindi su Permessi cartella - che le "cartelle cache" siano indicate come "scrivibili".

A questo punto, facendo clic sul menù Sito, Configurazione globale quindi su Sistema, si troveranno – posizionate a destra – le impostazioni per la regolazione del comportamento della cache di Joomla 2.5.

Il valore numerico inseribile nel campo Tempo cache consente di stabilire per quanti minuti un elemento dovrà permanere in cache.

Verificare quanto è veloce (o lenta) l'installazione di Joomla 2.5

Per controllare in quanto tempo il server web riesce a generare una qualunque pagina web componente il sito Joomla 2.5, è disponibile un comodo meccanismo. È sufficiente, sempre dalla scheda Sistema (menù Sito, Configurazione globale) del pannello di controllo di Joomla, fare clic sull'opzione in corrispondenza della voce Debug sistema:

In questo modo, in calce ad ogni pagina web, Joomla inserirà una serie di informazioni utili per verificare il comportamento del sito.

Prima di attivare la modalità "Debug sistema", suggeriamo di proteggere con username e password (uso di .htaccess ed eventualmente di .htpasswd) la cartella del server ove Joomla è installato. La funzionalità "Debug sistema" espone, infatti, alcune informazioni che sarebbe sempre bene mantenere segrete: le query SQL invocate da parte di ogni pagina PHP vengono infatti visualizzate in chiaro insieme con i dati richiesti/inseriti ed i nomi di database e tabelle MySQL.

In calce ad ogni pagina di Joomla 2.5 si troverà il riquadro Console debug Joomla. Con un clic su Informazioni profilo è possibile verificare quanto tempo ha richiesto la completa generazione della pagina PHP:

L'ultima riga (afterRender) riporta il tempo in secondi che lo script PHP ha impegnato per essere completamente eseguito.

Poco più sotto, la sezione Queries database riporta, nel dettaglio, l'elenco di tutte le varie query SQL tramesse dallo script PHP al database MySQL.

Ciò che manca, purtroppo, è indicazione del tempo speso da Joomla per l'esecuzione di ogni singola query SQL, indipendentemente dal fatto che si parli di richiesta di dati (SELECT), inserimento (INSERT INTO), aggiornamento dei record (UPDATE) o cancellazione (DELETE).

Per sopperire a questa mancanza è possibile risolvere modificando un paio di file PHP che compongono il pacchetto Joomla 2.5. I file da modificare sono due:
\libraries\joomla\database\database\mysqli.php
\plugins\system\debug\debug.php


IMPORTANTE: Qualora si utilizzasse MySQL anziché MySQLi, si dovrà modificare il file \libraries\joomla\database\database\mysql.php al posto di \libraries\joomla\database\database\mysqli.php.

La riga numero 372 di mysqli.php contiene l'istruzione $this->log[] = $sql;.
Essa dovrà essere sostituita col codice seguente:

			// Misura il tempo di esecuzione della query
			// $this->log[] = $sql;
			$t = microtime(true);
			// /Misura il tempo di esecuzione della query


Poco più sotto, immediatamente prima della riga return $this->cursor; dovrà essere inserito questo codice:

		// Misura il tempo di esecuzione della query
		if ($this->debug) {
	        $this->log[] = $sql. '####Tempo: '.(microtime(true) - $t);
	    }
	    // /Misura il tempo di esecuzione della query


Il file debug.php dovrà essere invece modificato inserendo, subito dopo la riga 709 ($sql = str_replace('*', '<b style="color: red;">*</b>', $sql);), il codice che segue:


		// Misura il tempo di esecuzione della query
		$sql = str_replace('####Tempo:', '<br>Tempo:', $sql);
		// /Misura il tempo di esecuzione della query


Così facendo, dopo aver salvato e ricaricato entrambi i file nelle posizione corrette sul server, la sezione Queries database presenterà, per ciascuna query SQL, l'indicazione "Tempo":

In questo modo, è possibile stabilire quali sono le query più lente (i tempi sono espressi in secondi) e capire se l'eventuale lentezza nel caricamento di una o più pagine del sito Joomla siano imputabili al server MySQL utilizzato.

Il debug delle query SQL è di grande aiuto per capire quanto sia performante un server MySQL, soprattutto se questo non risiede sulla medesima macchina ove è stato installato Joomla 2.5.


Velocizzare Joomla: come attivare la cache e