gzip (DEFLATE)
Посмотрите, как gzip уменьшает текст: повторы превращаются в короткие копии, а коды Huffman дают частым символам меньше бит.
- 32 КБ
- 3-258 байт
- до 15 бит
- обёртка gzip 18 байт
Окно: насколько далеко назад компрессор может искать повтор. В gzip это 32 КБ, в Brotli до 16 МБ.
Копия: длина и расстояние, которые означают «возьми столько-то символов с такого-то расстояния назад». Копия может перекрывать текст, который сама создаёт.
Код Huffman: последовательность бит для каждого символа, у частых символов более короткая. Строится по дереву, в котором снова и снова объединяются два самых редких символа.
Другие термины на этой странице
- Литерал: символ, записанный как есть, потому что с его позиции не начинается повтор длиной 3 символа и больше.
- Префиксный код: ни один код не является началом другого, поэтому поток кодов можно прочитать обратно без разделителей.
Попробуйте: Наберите одну и ту же букву много раз. Одна копия с расстоянием 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».