gzip (DEFLATE)
Podívejte se, jak gzip zmenšuje text: opakování se mění na krátké kopie a Huffmanovy kódy dávají častým symbolům méně bitů.
- Okno: 32 KB
- Kopie: 3-258 bajtů
- Kódy: až 15 bitů
- Rámec gzip: 18 bajtů
Co to znamená?
- Literál: znak zapsaný sám za sebe, protože na jeho pozici nezačíná žádné opakování 3 a více znaků.
- Kopie: délka a vzdálenost s významem „vezmi tolik znaků z tolika pozic zpět“. Může se překrývat s textem, který vytváří.
- Okno: jak daleko zpět smí kompresor hledat opakování. V gzip 32 KB, v Brotli až 16 MB.
- Huffmanův kód: bitový kód pro každý symbol, kratší pro časté symboly, sestavený ze stromu, který znovu a znovu spojuje dva nejvzácnější symboly.
- Prefixový kód: žádný kód není začátkem jiného, takže proud kódů lze přečíst zpět bez oddělovačů.
Počet znaků textu: 23, bez komprese 184 b. Kompresor ho čte zleva doprava a na každé pozici se ptá, jestli se to, co následuje, už objevilo dříve.
Mezerník: přehrát nebo pozastavit. Šipky vlevo/vpravo: krok. Home a End: přeskočit.
Zkuste: Napište mnohokrát stejné písmeno. Všechna pokryje jediná kopie se vzdáleností 1, protože kopie se smí překrývat s textem, který sama vytváří.
Jak to funguje
gzip spouští DEFLATE ve dvou fázích. LZ77 prochází text a na každé pozici hledá nejdelší úsek bajtů, který se už objevil v posledních 32 KB; místo opakování zapíše dvojici: kolik bajtů zkopírovat (3-258) a jak daleko zpět leží. Co zbude, tedy literály a tyto dvojice, se pak zapíše Huffmanovými kódy, kde časté symboly dostanou krátké kódy a vzácné dlouhé. gzip výsledek zabalí do 10bajtové hlavičky a 8bajtového zakončení s kontrolním součtem CRC-32.
Kdy se hodí
gzip komprimuje text, který se opakuje: HTML, CSS, JavaScript, JSON, logy, CSV. Rozumí mu každý prohlížeč i server, je rychlý na všech úrovních a je bezpečnou výchozí volbou pro kompresi odpovědí za běhu. Data, která už komprimovaná jsou, například JPEG, PNG, WOFF2 nebo ZIP, žádná opakování neobsahují, takže gzip jen přidá svůj rámec.
Na vlastním textu
Stejné dvě fáze, které na delším textu provede skutečný gzip (úroveň 6). Vložte vlastní text, nebo si ho přeneste z nástroje Komprese gzip a Brotli.