Developer Toolbox

gzip (DEFLATE)

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

  • 32 КБ
  • 3-258 байт
  • до 15 бит
  • обёртка gzip 18 байт
Другие термины на этой странице
  • Литерал: символ, записанный как есть, потому что с его позиции не начинается повтор длиной 3 символа и больше.
  • Префиксный код: ни один код не является началом другого, поэтому поток кодов можно прочитать обратно без разделителей.
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».

Ввод