19 Oct
matte

matte il 19 October 2006 parla di Configurazioni, Rails Snippet

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:

   .. <%= javascript_include_tag :defaults %>

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.

Scrivi un commento