Cos'è la compressione
La compressione è una tecnica con cui il server impacchetta un file in un formato più compatto prima di inviarlo al browser. Il browser riceve il file compresso, lo decodifica e lo usa. Si riduce così il tempo di trasferimento dati, soprattutto su connessioni lente. Per i file di testo (HTML, CSS, JS, JSON, font WOFF) il risparmio può arrivare al 60-80%.
Gzip o Brotli
Gzip è l'algoritmo standard, supportato da quasi tutti i server e i browser. Brotli è un algoritmo più moderno sviluppato da Google: comprime il 10-20% meglio ma con una velocità di compressione leggermente inferiore. Brotli è particolarmente efficace su testi e font.
| Algoritmo | Rapporto di compressione | Velocità di decompressione | Supporto browser |
|---|---|---|---|
| Nessuna compressione | 100% | — | 100% |
| Gzip | ~30-40% dell'originale | Veloce | 99%+ |
| Brotli | ~20-30% dell'originale | Media | 96%+ |
Best practice moderna: attiva Brotli per il traffico HTTPS e mantieni Gzip come fallback per i client più vecchi.
Cosa comprimere (e cosa no)
- Comprimi: HTML, CSS, JavaScript, JSON, XML, SVG (lossless), file di font WOFF/WOFF2 (compressione aggiuntiva), risposte testuali delle API.
- Non comprimere: i formati già compressi, come JPEG, PNG, WebP, MP4, WebM, ZIP (la doppia compressione non porta benefici e spreca CPU).
Come attivare la compressione (config del server)
# Nginx: enable Brotli (requires ngx_brotli module)
brotli on;
brotli_types text/plain text/css application/json application/javascript text/xml;
brotli_min_length 1000;
# Gzip as fallback
gzip on;
gzip_vary on;
gzip_types text/plain text/css application/json application/javascript text/xml;
gzip_min_length 1000;# Apache (.htaccess)
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/plain text/css application/json application/javascript text/xml
<IfModule mod_brotli.c>
AddOutputFilterByType BROTLI text/html text/plain text/css application/json application/javascript text/xml
</IfModule>
</IfModule>Come verificare la compressione
- Chrome DevTools → Network → seleziona una richiesta → Headers → Response Headers →
Content-Encoding: br(Brotli) oppuregzip. - PageSpeed Insights: consiglierà di attivare la compressione se è spenta.
- Servizi online: per esempio CheckGzipCompression.com.
- Comando curl:
curl -H "Accept-Encoding: br" -I https://example.com/style.css
# Check via curl
curl -s -I -H "Accept-Encoding: gzip, deflate, br" https://example.com | grep -i content-encoding