Comprimarea aceluiași fișier de fiecare dată
Apache comprimă răspunsurile din mers. Pentru o pagină care este de fiecare dată diferită, aceasta este singura opțiune. Pentru o foaie de stil care se schimbă o dată pe lună, înseamnă că serverul face aceeași muncă din nou pentru fiecare vizitator, săptămâni la rând, și aruncă rezultatul de fiecare dată. Nu există cache pentru asta.
Măsurat pe 19 august 2026, pe o conexiune existentă, cu fișierele proprii ale acestui site style.css (124 kB) și world.js (102 kB):
| timp | octeți | |
| fără compresie | 2,9 ms | 124.755 |
| gzip, din mers | 18,1 ms | 34.995 |
| brotli, din mers | 14,5 ms | 32.685 |
| world.js, gzip | 47,9 ms | 38.283 |
| world.js, brotli | 15,9 ms | 38.086 |
Patruzeci și opt de milisecunde de CPU, per cerere, pentru a produce un rezultat identic octet cu octet. Pe un server mic, asta nu este o eroare de rotunjire.
Comprimare o singură dată, pe disc
Un pas de build scrie fișierul comprimat lângă original, iar o regulă de rescriere îl servește când browserul anunță că acceptă gzip. Servirea unui fișier gata făcut costă cât servirea oricărui fișier.
gzip și nu brotli, dintr-un motiv banal: pe această mașină nu este instalat niciun executabil brotli. Fișierele ies cu aproximativ 7 % mai mari decât le-ar face brotli, iar timpul de server este o cincime din cât costă brotli din mers. Merita acceptat acest compromis acum, în loc să așteptăm un răspuns mai elegant.
Versiunea intră în numele fișierului
Build-ul scrie style.css.<mtime>.gz, iar ?v= din marcaj este exact același moment al modificării. Rescrierea se aplică doar când există un fișier cu numărul corespunzător.
Acest aranjament are o proprietate care merită urmărită în mod deliberat la proiectare: dacă foaia de stil se schimbă și refacerea build-ului este uitată, numărul din marcaj indică un fișier care nu există, rescrierea nu se aplică, iar Apache servește în mod normal originalul. În cel mai rău caz lipsește accelerarea. O foaie de stil învechită nu poate ajunge la vizitator. Orice schemă de cache ar trebui verificată cu această întrebare — când ceva merge prost, devine lentă sau devine greșită?
Eroarea din mijlocul poveștii
Fișierul servit este deja gzip, deci nu trebuie comprimat din nou la ieșire. Configurația seta inițial no-gzip, care oprește unul dintre cele două compresoare ale Apache. Celălalt, mod_brotli, a comprimat voios cu brotli fișierul gzip gata făcut, în timp ce antetul răspunsului continua să spună gzip.
Browserele au primit conținut ilizibil. Problema nu a fost observată privind pagina — a fost prinsă adunând octeții și găsind un număr care nu avea sens. Este nevoie de no-gzip și de no-brotli deopotrivă, dar doar una dintre ele este cea evidentă.