Pořád dokola komprimovat tentýž soubor
Apache komprimuje odpovědi za běhu. Pro stránku, která je pokaždé jiná, je to jediná možnost. Pro styl, který se mění jednou za měsíc, to znamená, že server odvádí stejnou práci znovu pro každého návštěvníka, týdny, a výsledek pokaždé zahodí. Žádná mezipaměť pro to neexistuje.
Měřeno 19. srpna 2026 přes existující spojení, na vlastním souboru style.css (124 kB) a world.js (102 kB) tohoto webu:
| čas | bajty | |
| bez komprese | 2,9 ms | 124 755 |
| gzip, za běhu | 18,1 ms | 34 995 |
| brotli, za běhu | 14,5 ms | 32 685 |
| world.js, gzip | 47,9 ms | 38 283 |
| world.js, brotli | 15,9 ms | 38 086 |
Čtyřicet osm milisekund procesoru na každý požadavek, aby vznikl bajt po bajtu stejný výsledek. Na malém serveru to není zaokrouhlovací chyba.
Komprimovat jednou, na disk
Krok sestavení zapíše komprimovaný soubor vedle originálu a přepisovací pravidlo ho doručí, když prohlížeč oznámí, že přijímá gzip. Doručení hotového souboru stojí tolik, kolik stojí doručení jakéhokoli souboru.
Gzip místo brotli, a to z nudného důvodu: na tomto stroji není nainstalovaný program brotli. Soubory vycházejí asi o 7 % větší, než by je udělal brotli, a čas serveru je pětina toho, co stojí brotli za běhu. Ten kompromis stálo za to přijmout hned, místo čekat na hezčí řešení.
Verze patří do názvu souboru
Sestavení zapíše style.css.<mtime>.gz, přičemž ?v= v kódu stránky odpovídá témuž času poslední změny. Přepis se uplatní jen tehdy, když soubor s odpovídajícím číslem existuje.
Toto uspořádání má vlastnost, kterou stojí za to navrhovat záměrně: když se styl změní a na nové sestavení se zapomene, číslo v kódu ukazuje na soubor, který neexistuje, přepis se neuplatní a Apache normálně doručí originál. V nejhorším případě chybí zrychlení. Zastaralý styl ven nemůže. Každé schéma mezipaměti by se mělo ověřit touto otázkou – když se něco pokazí, bude to pomalé, nebo špatné?
Chyba uprostřed
Doručovaný soubor už je v gzipu, takže se na cestě ven nesmí komprimovat znovu. Konfigurace původně nastavovala no-gzip, což vypne jeden ze dvou kompresorů Apache. Ten druhý, mod_brotli, vesele zkomprimoval hotový soubor gzip brotlim, zatímco hlavička odpovědi dál tvrdila gzip.
Prohlížeče dostaly nečitelný obsah. Nepřišlo se na to pohledem na stránku – přišlo se na to sečtením bajtů a nalezením čísla, které nedávalo smysl. Potřeba je no-gzip i no-brotli a samozřejmá je jen jedna z nich.