Kontaktovat podporu

Odpovíme e-mailem, obvykle do dvou dnů.

Google reCAPTCHA kontroluje toto odeslání kvůli ochraně před zneužitím; data se přitom předávají společnosti Google. Skript se načte až při otevření tohoto formuláře.

← Všechny články

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:

časbajty
bez komprese2,9 ms124 755
gzip, za běhu18,1 ms34 995
brotli, za běhu14,5 ms32 685
world.js, gzip47,9 ms38 283
world.js, brotli15,9 ms38 086
bez komprese2,9 msgzip18,1 msbrotli14,5 msworld.js gzip47,9 msworld.js brotli15,9 ms

Č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.

Reklama