Se il vostro host non supporta il deflate/gzip o semplicemente volete risparmiare risorse non ricomprimendo ad ogni richiesta file sempre uguali, c’è un piccolo trucchetto che potete mettere in atto grazie alla mod_rewrite e a un po’ d’astuzia.
Procuratevi gzip per la vostra piattaforma (potete farlo anche direttamente sul server se avete l’accesso alla shell) e comprimete i file statici. Ricordate di lasciare anche il file originale in caso il browser non voglia quello compresso. Evitate inoltre di comprimere i file dinamici, tipo i .php.
Una volta fatto questo, impostate questa regola di apache:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase /
RewriteOptions Inherit
ReWriteCond %{HTTP:accept-encoding} (gzip.*)
ReWriteCond %{REQUEST_FILENAME} !.+\.gz$
RewriteCond %{REQUEST_FILENAME}.gz -f
RewriteRule (.+) $1.gz [QSA,L]
</IfModule>
Il significato è questo: se il browser accetta file compressi con gzip e una versione compressa esiste, invia il file che si chiama nomeoriginale.gz; altrimenti invia nomeoriginale.
Se volete, potete anche comprimere l’output dei file php tramite php.ini:
zlib.output_compression = On
zlib.output_compression_level = 5
Queste due tecniche consentono di risparmiare mediamente il 50% dei dati inviati. Ovviamente il rendimento cambia da file a file, ma sicuramente un miglioramento lo vedrete.
Un piccolo consiglio: quando comprimete, verificate sempre che il file originale non sia più piccolo di quello compresso. La cosa non è scontata.
Vi lascio il programmino che ho usato per comprimere questo sito.
static void Main(string[] args) { DirectoryInfo di = new DirectoryInfo("root"); foreach (FileInfo f in di.GetFiles("*", SearchOption.AllDirectories)) { if(!f.Name.StartsWith(".") && f.Extension != ".php" && f.Extension != ".gz") { ProcessStartInfo psi = new ProcessStartInfo("gzip.exe", "-9 -k -f \"" + f.FullName + "\""); psi.CreateNoWindow = true; psi.UseShellExecute = false; psi.WindowStyle = ProcessWindowStyle.Hidden; Process.Start(psi).WaitForExit(); FileInfo f2 = new FileInfo(f.FullName + ".gz"); if(f2.Exists) if(f2.Length >= f.Length) f2.Delete(); } } }