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».