Rails, LightTPD e mod_compress
Con il proliferare di funzionalità ed effetti in javascript semplicissimi da implementare sono aumentate notevolemente le dimensioni delle pagine HTML da scaricare. Se prendiamo ad esempio una applicazione Rails e inseriamo all’interno del template il tag:
..
Automaticamente appendiamo alla nostra pagina la bellezza di 145 KBytes da scaricare. Vediamo le impostazioni da settare per il LightTPD in modo da servire i file compressi in gzip.
1 server.modules = ( ... , "mod_compress", "mod_expire", ... ) 2 3 compress.filetype = ( "text/plain", "text/html", "text/css", "text/javascript" ) 4 compress.cache-dir = PATH_TO_APP + "/tmp/cache" 5 6 expire.url = ( "/favicon.ico" => "access 3 days", 7 "/images/" => "access 3 days", 8 "/stylesheets/" => "access 3 days", 9 "/javascripts/" => "access 3 days" )
Vediamo in dettaglio le righe sopra:
- linea 1: Moduli da abilitare per servire contenuto compresso
- linea 3: Tipi di contenuti da servire compressi
- linea 4: Folder in cui il LightTPD tiene i file compressi da servire
- linee 6-9: Durata dei file elencati prima di essere invalidati
In questo modo i browser che supportano gzip o deflate come codifica ricevono i file compressi automaticamente, altrimenti testo non codificato.
Vediamo come è possibile verificare se i settaggi sono stati effettuati correttamente. Lanciare il server lightTPD dell’applicazione (supponiamo sulla porta 3000) ed eseguite da riga di comando:
1 telnet localhost 3000
A questo punto si apre la shell del telnet in cui dovete inserire:
1 GET /javascripts/prototype.js HTTP/1.0 2 Host: localhost 3 Accept-Encoding: gzip
Come risposta (se è presente nella vostra applicazione il file prototype.js nella cartella javascripts) dovreste ottenere qualcosa del tipo:
5 HTTP/1.0 200 OK 6 Connection: close 7 Vary: Accept-Encoding 8 Content-Encoding: gzip 9 Last-Modified: Tue, 03 Oct 2006 14:56:08 GMT 10 ETag: "203540676" 11 Content-Type: text/javascript 12 Expires: Sun, 22 Oct 2006 08:44:09 GMT 13 Cache-Control: max-age=259200 14 Accept-Ranges: bytes 15 Content-Length: 12466 16 Date: Thu, 19 Oct 2006 08:44:09 GMT 17 Server: lighttpd/1.4.11
ed una serie di linee con caratteri speciali che indicano il file compresso. Se ripete l’operazione omettendo la linea 3 ottenete invece il file non compresso. E’ possibile osservare come alla linea 15 viene evidenziata la dimensione del file servito dal web server: 12 KBytes circa, mentra la versione non compressa era di 55 KBytes.
Concludendo è possibile abbassare la quantità di dati scambiati passando dai 145 KBytes iniziali a 34 KBytes. Questo solamente considerando i file javascript. La compressione avviene inoltre anche per i CSS, le pagine statiche e i file di testo.

