Compressione (Gzip, Brotli)

La compressione è il processo che riduce la dimensione delle risorse di testo sul server prima dell'invio al browser, che le decomprime automaticamente. Gli algoritmi più diffusi sono Gzip e Brotli. Attivare la compressione può ridurre del 60-70% la dimensione di HTML, CSS e JavaScript, incidendo direttamente su LCP e sul tempo di caricamento complessivo.

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.

AlgoritmoRapporto di compressioneVelocità di decompressioneSupporto browser
Nessuna compressione100%—100%
Gzip~30-40% dell'originaleVeloce99%+
Brotli~20-30% dell'originaleMedia96%+

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
# 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
# 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) oppure gzip.
  • 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
bash
# Check via curl
curl -s -I -H "Accept-Encoding: gzip, deflate, br" https://example.com | grep -i content-encoding
Attivare la compressione è una delle ottimizzazioni più semplici ed efficaci: nella maggior parte dei casi migliora i Core Web Vitals (LCP, FCP) e i punteggi di PageSpeed Insights.

FAQ

Meglio Brotli o Gzip?
Brotli comprime meglio (file più piccoli del 15-25%). Gzip comprime più velocemente ed è più compatibile. Consiglio: attiva entrambi (Brotli preferito, Gzip come fallback).
Perché la dimensione del file non cala dopo aver attivato la compressione?
Potresti non aver configurato i MIME type corretti, oppure il file è già compresso (per esempio le immagini). Controlla l'header Content-Encoding.
Devo comprimere l'HTML dinamico (PHP, Python)?
Sì, la compressione vale per qualsiasi output testuale, sia file statici sia risposte generate. Attivala a livello di server per i tipi interessati.
Come incide la compressione sui Core Web Vitals?
Ridurre la dimensione di HTML, CSS e JS abbassa i tempi di caricamento, con effetti positivi su LCP (il contenuto grande compare prima) e FCP. Si nota soprattutto su mobile.
Devo comprimere le risposte delle API (JSON)?
Sì, JSON è testo: la compressione riduce il volume trasferito, velocizza le richieste AJAX e migliora la performance percepita.