Contatta l'assistenza

Rispondiamo per e-mail, di solito entro due giorni.

Per prevenire abusi, Google reCAPTCHA verifica questo invio; alcuni dati vengono trasmessi a Google. Lo script viene caricato solo quando apri questo modulo.

← Tutti gli articoli

Comprimere ogni volta lo stesso file

Apache comprime le risposte al volo. Per una pagina che è diversa ogni volta è l'unica strada. Per un foglio di stile che cambia una volta al mese significa che il server rifà lo stesso lavoro per ogni visitatore, per settimane, e ogni volta butta via il risultato. Una cache per questo non esiste.

Misurato il 19 agosto 2026 su una connessione già aperta, con il style.css (124 kB) e il world.js (102 kB) di questo sito:

tempobyte
senza compressione2,9 ms124.755
gzip, al volo18,1 ms34.995
brotli, al volo14,5 ms32.685
world.js, gzip47,9 ms38.283
world.js, brotli15,9 ms38.086

Quarantotto millisecondi di CPU, per richiesta, per produrre un risultato identico byte per byte. Su un Raspberry Pi non è un errore di arrotondamento.

Comprimere una volta, su disco

Un passo di costruzione scrive il file compresso accanto all'originale, e una regola di riscrittura lo serve quando il browser dichiara di accettare gzip. Servire un file già pronto costa quel che costa servire qualunque file.

gzip e non brotli, per un motivo noioso: su questa macchina non c'è nessun eseguibile brotli installato. I file escono circa il 7 % più grandi di quanto li farebbe brotli, e il tempo del server è un quinto di quel che costa brotli al volo. Quello scambio valeva la pena farlo ora invece di aspettare una risposta più elegante.

La versione sta nel nome del file

La costruzione scrive style.css.<mtime>.gz, e il ?v= nel markup è quella stessa ora di modifica. La riscrittura scatta solo se esiste un file con il numero corrispondente.

Questa disposizione ha una proprietà per cui vale la pena progettare apposta: se cambi il foglio di stile e dimentichi di ricostruire, il numero nel markup punta a un file che non esiste, la riscrittura non scatta e Apache serve normalmente l'originale. Il caso peggiore è che manchi l'accelerazione. Un foglio di stile scaduto non può uscire. Ogni schema di cache andrebbe messo alla prova con questa domanda — quando va male, diventa lento o diventa sbagliato?

Il difetto nel mezzo

Il file servito è già gzip, quindi non va compresso una seconda volta in uscita. Nella configurazione all'inizio c'era no-gzip, che ferma uno dei due compressori di Apache. L'altro, mod_brotli, ricomprimeva allegramente in brotli il file gzip finito, mentre l'intestazione della risposta continuava a dire gzip.

I browser ricevevano contenuto illeggibile. Non è emerso guardando la pagina — è emerso sommando i byte e trovando un numero che non aveva senso. Servono entrambi, no-gzip e no-brotli, e solo uno dei due è quello ovvio.

Pubblicità