Developer Toolbox

gzip (DEFLATE)

Посмотрите, как gzip уменьшает текст: повторы превращаются в короткие копии, а коды Huffman дают частым символам меньше бит.

  • Окно: 32 КБ
  • Копии: 3-258 байт
  • Коды: до 15 бит
  • Обёртка gzip: 18 байт
Что это значит?
  • Литерал: символ, записанный как есть, потому что с его позиции не начинается повтор длиной 3 символа и больше.
  • Копия: длина и расстояние, которые означают «возьми столько-то символов с такого-то расстояния назад». Копия может перекрывать текст, который сама создаёт.
  • Окно: насколько далеко назад компрессор может искать повтор. В gzip это 32 КБ, в Brotli до 16 МБ.
  • Код Huffman: последовательность бит для каждого символа, у частых символов более короткая. Строится по дереву, в котором снова и снова объединяются два самых редких символа.
  • Префиксный код: ни один код не является началом другого, поэтому поток кодов можно прочитать обратно без разделителей.
LZ77 и Huffman по шагам 0 / 19 шагов

Символов в тексте: 23, без сжатия он занимает 184 бит. Компрессор читает его слева направо и в каждой позиции проверяет, встречалось ли раньше то, что идёт дальше.

Пробел: воспроизведение или пауза. Стрелки влево и вправо: шаг. Home и End: в начало или в конец.

Попробуйте: Наберите одну и ту же букву много раз. Одна копия с расстоянием 1 покрывает их все, потому что копия может перекрывать текст, который сама создаёт.

Как это работает

gzip выполняет DEFLATE в два этапа. LZ77 проходит по тексту и в каждой позиции ищет самую длинную последовательность байтов, которая уже встречалась в последних 32 КБ; вместо того чтобы повторять эти байты, он записывает пару: сколько байтов скопировать (3-258) и насколько далеко назад они находятся. Затем всё, что получилось (литералы и эти пары), записывается кодами Huffman: частые символы получают короткие коды, редкие длинные. Результат gzip оборачивает в 10-байтовый заголовок и 8-байтовый хвост с контрольной суммой CRC-32.

Когда стоит применять

gzip сжимает текст, в котором много повторов: HTML, CSS, JavaScript, JSON, логи, CSV. Его понимают все браузеры и серверы, он быстр на любом уровне, и это надёжный выбор по умолчанию для сжатия ответов на лету. В уже сжатых данных, таких как JPEG, PNG, WOFF2 или ZIP, повторов не осталось, так что gzip только добавляет свою обёртку.

На вашем тексте

Те же два этапа, но их выполняет настоящий gzip (уровень 6) на более длинном тексте. Вставьте свой текст или возьмите его из инструмента «Сжатие gzip и Brotli».

Ввод