gzip (DEFLATE)
Zie hoe gzip tekst kleiner maakt: herhalingen worden korte kopieën, en Huffman-codes geven veelvoorkomende symbolen minder bits.
- Venster: 32 KB
- Kopieën: 3-258 bytes
- Codes: tot 15 bits
- gzip-verpakking: 18 bytes
Wat betekent dit?
- Literal: een teken dat als zichzelf wordt geschreven, omdat op zijn positie geen herhaling van 3 of meer tekens begint.
- Kopie: een lengte en een afstand die betekenen "neem zoveel tekens van zo ver terug". Een kopie mag overlappen met de tekst die ze maakt.
- Venster: hoe ver de compressor terug mag kijken naar een herhaling. 32 KB in gzip, tot 16 MB in Brotli.
- Huffman-code: een bitcode voor elk symbool, korter voor veelvoorkomende symbolen, opgebouwd uit een boom die steeds opnieuw de twee zeldzaamste symbolen samenvoegt.
- Prefixvrij: geen enkele code is het begin van een andere, dus een reeks codes kan zonder scheidingstekens worden teruggelezen.
De tekst heeft 23 tekens, 184 bits ongecomprimeerd. De compressor leest hem van links naar rechts en vraagt op elke positie of wat volgt al eerder voorkwam.
Spatie: afspelen of pauzeren. Pijltjes links/rechts: stap. Home en End: springen.
Probeer dit: Typ vele keren dezelfde letter. Eén kopie met afstand 1 dekt ze allemaal, want een kopie mag overlappen met de tekst die ze zelf maakt.
Hoe het werkt
gzip voert DEFLATE in twee fasen uit. LZ77 loopt door de tekst en zoekt op elke positie de langste reeks bytes die al in de laatste 32 KB voorkwam. In plaats van die te herhalen schrijft het een paar: hoeveel bytes er gekopieerd worden (3-258) en hoe ver terug ze staan. Wat overblijft, de literals en die paren, wordt daarna met Huffman-codes geschreven: veelvoorkomende symbolen krijgen korte codes, zeldzame lange. gzip verpakt het resultaat in een header van 10 bytes en een trailer van 8 bytes met een CRC-32-controlesom.
Wanneer het een goede keuze is
gzip comprimeert tekst die zichzelf herhaalt: HTML, CSS, JavaScript, JSON, logs, CSV. Elke browser en server begrijpt het, het is snel op elk niveau en het is de veilige standaardkeuze om antwoorden on the fly te comprimeren. Gegevens die al gecomprimeerd zijn, zoals JPEG, PNG, WOFF2 of ZIP, bevatten geen herhalingen meer, dus daar voegt gzip alleen zijn verpakking toe.
Op je eigen tekst
Dezelfde twee fasen, uitgevoerd door echte gzip (niveau 6) op een langere tekst. Plak je eigen tekst, of neem er een mee uit de tool Gzip- & Brotli-compressie.