Dopo la scorsa lezione sulla velocizzazione del processo di parsing dell'interprete, attraverso le funzioni che gestiscono l'output (ob_) vorrei insegnarvi come sfruttare queste funzioni che ci offre PHP  per comprimere i file js con gzip.

Come potete ricordare alla fine della vecchia lezione ho insegnato un sistema per alleggerire le pagine con il metodo di compressione gzip ob_Start("ob_gzhandler"). Ovviamente non possiamo applicare direttamente questo codice PHP alle nostre pagine js ma con un piccolo accorgimento possiamo applicare la compressione anche a essi e in più impostargli un tempo di scadenza che permetterà al browser di archiviare il file nella cache del browser. Il trucco sta nel modificare l'htaccess della cartella contenete i file js per ridirigere tutte le richieste ad una pagina php che fornirà le pagine javascript e allo stesso tempo gli applicherà la compressione.

In questo esempio terremo conto che i file javascript siano posti nella directory "/include/javascript/" e/o nelle sue sottodirectory.

Per prima cosa vediamo il codice dei due file:

.htaccess

 

RewriteEngine on
RewriteBase /include/javascript/ #Questa è la directory dove sarà posto l'htaccess e tutti i file
RewriteRule ^.*\.js$ js.php [QSA,NC,L] #Tutte le richieste di un file js contenuto in questa directory e nelle sue sottodirectory saranno rinviate al file js.php

 

js.php

 

ob_start("ob_gzhandler");//Avvio raccolta output e compressione
$file=preg_replace("/^\/include\/javascript\//", "", $_SERVER['REQUEST_URI']);//Eliminiamo il percorso di base
if(file_exists($file)) {//Verifichiamo se il file esiste
	if(in_array($file, array("jquery.js", "jquery.interface.js", "jquery.mousewheel.js"))) header("Cache-Control: max-age=".(60*60*24*7));//Se il file è una libreria, impostiamo un limite di tempo per la cache
	header("Content-Type: text/javascript");//Impostiamo il Content-Type
	readfile($file);//Restituiamo il file js
} else header("Location: /");

Analizziamo lo script: Per prima cosa si avvia la raccolta dell'output con compressione, dopodiché otteniamo dall'url assoluto il file che lo script dovrà fornire all'utente, facciamo una piccola verifica per vedere se il file che stiamo cercando di ottenere esiste e se il risultato sarà negativo, rimanderemo l'utente a una pagina d'errore, in caso contrario continueremo l'esecuzione dello script. Per tutti i file javascript che sappiamo, non saranno modificati spesso (un esempio possono essere le librerie) andiamo a impostare un tempo per cui essi dovranno essere conservati nella cache del browser (espresso in secondi, nel nostro caso una settimana), cosi da rendere più veloci i successivi caricamenti della pagina. In fine impostiamo l'header "Content-Type" di un file js e restituiamo il contenuto del file originale.

Ricapitolando

Abbiamo visto un semplice metodo per comprimere le nostre pagine con gzip nel caso questo non fosse disponibile sul nostro server di default, in più abbiamo imparato come impostare la durata di una pagina nella cache grazie all'header "Cache-Control" accelerando ulteriormente i successivi caricamenti della pagina.

E con questo abbiamo finito, spero che queste informazioni vi possano essere d'aiuto e non perdetevi la mia prossima guida che parlerà di una gestione intelligente ed elegante delle pagine di un sito.

Alla prossima ;-)