Developer Toolbox

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.
LZ77 i Huffman krok po kroku 0 / 19 krokó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.

Wejście