Comprimere i CSS
IL PROBLEMA
Stavo cercando di ottimizzare al meglio RapTxt.it quando mi è venuta l’idea di controllare su s.google se PHP contiene qualche funzione per ottimizzare le dimensioni dei CSS.
Ebbene si, come ci si poteva immaginare PHP incorpora un’ottima funzione che permette la compressione delle pagine prima di essere inviate al browser.
Infatti, mentre le immagini sono già compresse, codice html e CSS sono testo puro non compresso.
Ci viene quindi in aiuto PHP con la funzione ‘ob_gzhandler’ e/o Apache con la funzione ‘mod_gzip’ che ci permette di comprimere fino al 75% i fogli di stile.
IL CODICE DA USARE
header("Content-type: text/css; charset: UTF-8");
header("Cache-Control: must-revalidate");
$offset = 60 * 60 ;
$ExpStr = "Expires: " .
gmdate("D, d M Y H:i:s",
time() + $offset) . " GMT";
header($ExpStr);
?>
Ecco cosa fa il codice:
- Usa ob_gzhandler per inviare dati compressi. La funzione si accerta che il browser accetti l’encoding ‘gzip,deflate’, e in caso negativo il testo viene inviato non-compresso.
- Invia un header che contiene il tipo di contenuto e il set di caratteri – in questo caso text/css e UTF-8.
- Poi invia un ‘cache-control http header’. Qui ‘must-revalidate’ si assicura che il contenuto inviato è aggiornato e non è obsoleto.
- Il passo finale è spedire un header che dica quando il contenuto contenuto nella cache scada. In questo caso è settato ad un’ora.
PRIMO METODO
Questo è il metodo più semplice ed immediato da usare.
Infatti basta conoscere leggermente PHP e piazzare il codice mostrato sopra all’interno del CSS.
Poi, bisogna rinominare il CSS cambiandogli l’estensione in .php e linkandolo come segue:
SECONDO METODO
Il secondo metodo è molto più elegante e chiaro. C’è di contro che bisogna mettere mano al file .htaccess.
Sono necessari due passi per implementare questo metodo.
Primo
Salvate il codice di sopra come ‘gzip-css.php’ nella directory che contiene il CSS che volete usare.
Secondo
Poi, inserite il codice di sotto in un file .htaccess che andrete a salvare nella stessa directory del vostro CSS:
php_value auto_prepend_file gzip-css.php
php_flag zlib.output_compression On
Ecco cosa fa:
- La prima riga dice ad Apache di mandare tutti i file .css all’handler di PHP.
- La seconda riga aggiunge il contenuto dello script gzip-css.php al CSS.
- Opzionale: La terza riga dice ad Apache di usare la compressione zlib per tutti i file che parsa. Se usate questa cmpressione non c’è bisogno di inserire ob_start ("ob_gzhandler"); nel codice visto all’inizio. Fra l’altro, inserendo questa riga, apache comprimerà anche le pagine php e html rendendole più leggere e veloci da scaricare.
Commenti
Vincenzo ( http://www.sonorika.com → )
Ma questo metodo (diciamo il 2°.) non porta ad un grande lavoro di apache se il sito ha un alto numero di visite (diciamo 200 utenti collegati...)?
camu ( http://www.duechiacchiere.it → )
Ho scoperto che l'overhead introdotto da questo trucco è troppo svantaggioso rispetto al risparmio che se ne ottiene. Meglio servire (per me) 10k in più che attivare il PHP e fargli comprimere ogni volta il file :(
La tua opinione