gzip (DEFLATE)
Zobacz, jak gzip zmniejsza tekst: powtórzenia zamienia na krótkie kopie, a kody Huffmana dają częstym symbolom mniej bitów.
- Okno: 32 KB
- Kopie: 3-258 bajtów
- Kody: do 15 bitów
- Ramka gzip: 18 bajtów
Co to znaczy?
- Literał: znak zapisany wprost, bo na jego pozycji nie zaczyna się żadne powtórzenie dłuższe niż 2 znaki.
- Kopia: długość i odległość, czyli „weź tyle znaków sprzed tylu pozycji”. Może zachodzić na tekst, który sama tworzy.
- Okno: jak daleko wstecz kompresor może szukać powtórzenia. W gzip 32 KB, w Brotli do 16 MB.
- Kod Huffmana: ciąg bitów dla każdego symbolu, krótszy dla częstych symboli, zbudowany z drzewa, które raz za razem łączy dwa najrzadsze symbole.
- Kod prefiksowy: żaden kod nie jest początkiem innego, więc strumień kodów da się odczytać bez separatorów.
Liczba znaków w tekście: 23, czyli 184 b bez kompresji. Kompresor czyta go od lewej do prawej i na każdej pozycji sprawdza, czy to, co nadchodzi, już było.
Spacja: odtwórz lub wstrzymaj. Strzałki lewo/prawo: krok. Home i End: przeskocz.
Spróbuj: Wpisz wiele razy tę samą literę. Jedna kopia z odległością 1 obejmie je wszystkie, bo kopia może zachodzić na tekst, który sama tworzy.
Jak to działa
gzip uruchamia DEFLATE w dwóch etapach. LZ77 przechodzi przez tekst i na każdej pozycji szuka najdłuższego ciągu bajtów, który wystąpił już w ostatnich 32 KB; zamiast go powtarzać zapisuje parę: ile bajtów skopiować (3-258) i jak daleko wstecz one są. To, co zostało, czyli literały i te pary, trafia do kodowania Huffmana: częste symbole dostają krótkie kody, a rzadkie długie. gzip opakowuje wynik 10-bajtowym nagłówkiem i 8-bajtową stopką z sumą kontrolną CRC-32.
Kiedy warto go użyć
gzip kompresuje tekst, który się powtarza: HTML, CSS, JavaScript, JSON, logi, CSV. Rozumie go każda przeglądarka i każdy serwer, jest szybki na każdym poziomie i jest bezpiecznym wyborem do kompresji odpowiedzi w locie. Dane już skompresowane, takie jak JPEG, PNG, WOFF2 czy ZIP, nie mają powtórzeń, więc gzip dokłada im tylko swoją ramkę.
Na własnym tekście
Te same dwa etapy w wykonaniu prawdziwego gzipa (poziom 6) na dłuższym tekście. Wklej własny albo przynieś go z narzędzia Kompresja gzip i Brotli.