Зачем использовать deflate вместо gzip для текстовых файлов, обслуживаемых Apache?

Какие преимущества дает любой метод для файлов HTML, CSS и javascript, обслуживаемых сервером LAMP. Есть ли лучшие альтернативы?

Сервер предоставляет информацию картографическому приложению с помощью Json, поэтому большой объем небольших файлов.

См. также Есть ли какое-либо снижение производительности при выборе gzip вместо deflate для HTTP-сжатия?


person Ken    schedule 23.12.2008    source источник
comment
переключил принятые ответы ... текущий консенсус - два к одному в пользу gzip   -  person Ken    schedule 03.10.2012
comment
mod_deflate для Apache 2, mod_gzip для Apache 1.3.   -  person SPRBRN    schedule 17.10.2014


Ответы (9)


Зачем использовать deflate вместо gzip для текстовых файлов, обслуживаемых Apache?

Простой ответ: не надо.


RFC 2616 определяет deflate как:

deflate Формат «zlib», определенный в RFC 1950, в сочетании с механизмом сжатия «deflate», описанным в RFC 1951.

Формат zlib определен в RFC 1950 как:

     0   1
     +---+---+
     |CMF|FLG|   (more-->)
     +---+---+

       0   1   2   3
     +---+---+---+---+
     |     DICTID    |   (more-->)
     +---+---+---+---+

     +=====================+---+---+---+---+
     |...compressed data...|    ADLER32    |
     +=====================+---+---+---+---+

Итак, несколько заголовков и контрольная сумма ADLER32.

RFC 2616 определяет gzip как:

gzip Формат кодирования, созданный программой сжатия файлов «gzip» (GNU zip), как описано в RFC 1952 [25]. Этот формат представляет собой кодировку Лемпеля-Зива (LZ77) с 32-битным CRC.

RFC 1952 определяет сжатые данные как:

В настоящее время формат использует метод сжатия DEFLATE, но его можно легко расширить для использования других методов сжатия.

CRC-32 медленнее, чем ADLER32

По сравнению с циклической проверкой избыточности такой же продолжительности, здесь надежность торгуется на скорость (предпочитая последнее).

Итак ... у нас есть 2 механизма сжатия, которые используют тот же алгоритм сжатия, но другой алгоритм для заголовков и контрольной суммы.

Теперь базовые TCP-пакеты уже довольно надежны, поэтому проблема здесь не в Adler 32. по сравнению с CRC-32, который использует GZIP.


Оказывается, многие браузеры за эти годы реализовали неправильный алгоритм дефлятирования. Вместо ожидания заголовка zlib в RFC 1950 они просто ожидали сжатой полезной нагрузки. Точно так же разные веб-серверы совершили ту же ошибку.

Итак, с годами браузеры начали реализовывать реализацию deflate нечеткой логики, они пробуют использовать заголовок zlib и контрольную сумму adler, если это не удается, они пробуют полезную нагрузку.

Результатом такой сложной логики является то, что она часто нарушается. В Verve Studio есть пользовательский тест, показывающий, насколько плоха ситуация.

Например: deflate работает в Safari 4.0, но не работает в Safari 5.1, у него также всегда есть проблемы с IE.


Итак, лучше всего вообще избегать дефляции, незначительное увеличение скорости (из-за Adler 32) не стоит риска поломки полезной нагрузки.

person Sam Saffron    schedule 25.03.2012
comment
Разве не должен быть новый стандарт, сочетающий adler32 с gzip? - person Pacerier; 04.07.2012
comment
@Sam Saffron, означает ли это, что если веб-браузер отсутствует на картинке, я могу использовать deflate вместо gzip? Например, если я собираюсь загрузить сжатый файл на свой FTP-сервер. - person Xegara; 03.11.2016
comment
Еще одно очень незначительное отличие состоит в том, что размер оболочки zlib составляет шесть байтов против 18 байтов для gzip. Таким образом, для очень маленьких пакетов может быть преимуществом отправка на 12 байтов меньше. Однако вывод не меняется: из-за того, что Microsoft облажалась для всех, неверно истолковав значение deflate в том, что они поставили на свои серверы IIS, проще просто использовать формат gzip. - person Mark Adler; 25.01.2018
comment
Но как можно сломать полезную нагрузку, если она передается по TCP? Вся идея TCP состоит в том, чтобы передавать непрерывную полезную нагрузку. - person user1095108; 23.11.2018
comment
Этот ответ датирован 2012 годом. Таким образом, современные браузеры по-прежнему страдают от проблемы неправильной реализации алгоритмов deflate или безопасно ли их использовать сейчас? Эта часть ответа все еще актуальна? - person ihebiheb; 10.06.2019

GZip - это просто дефляция, плюс контрольная сумма и верхний / нижний колонтитулы. Однако Deflate быстрее, поскольку Я узнал на собственном горьком опыте.

gzip vs deflate graph

person Jeff Atwood    schedule 23.12.2008
comment
Кажется, это в основном контрольная сумма, которая соответствует меньшей разнице в более быстрых системах. - person schnaader; 23.12.2008
comment
На чипах Intel это не имеет особого значения, поскольку они получают эту причудливую инструкцию SSE4.2 CRC32 ... - person ; 22.02.2009
comment
это есть только у новейших чипов Intel - Core i7 или лучше - person Jeff Atwood; 05.05.2009
comment
Не говоря уже о том, что zlib не поддерживает расширение, и даже если бы она была, инструкция CRC32 в SSE 4.2 использует полином 1EDC6F41, а формат gzip использует полином EDB88320 - по сути, совершенно разные алгоритмы. - person Jack Lloyd; 20.10.2009
comment
И поскольку deflate быстрее, почему SO использует gzip? - person David Murdoch; 16.09.2010
comment
На самом деле Deflate - это формат zlib, который представляет собой необработанные данные deflate с гораздо меньшим заголовком и более дешевой в вычислительном отношении контрольной суммой Adler32 в конце. - person Randy the Dev; 27.09.2010
comment
Что ж, этот ответ оказывается неверным ... см .: http://zoompf.com/blog/2012/02/lose-the-wait-http-compression ... в частности, у клиента есть 2 способа интерпретации deflate, без заголовка / без контрольной суммы и с заголовком zlib. Реализация правильного дефлятирования в браузерах плохая. следует избегать сдува. - person Sam Saffron; 25.03.2012
comment
@sam, кроме того, я только что повторно запустил тесты и на современном чипе Intel получил gzip 1441/692 и выкачал 1286/531. Второе число - декомпрессия, первое - сжатие. Так что deflate еще быстрее, показывают ли ваши тесты иначе? (Я согласен, что это может быть бесполезно по другим причинам, но ответ правильный, сдутие происходит быстрее ..) - person Jeff Atwood; 27.03.2012
comment
@JeffAtwood, но вопрос был не быстрее? - person Ken; 16.05.2012
comment
@Ken Ваш вопрос: What advantages ... for ... files served by LAMP server?. И производительность - одна из проблем на стороне сервера для всех, кому удалось привлечь большое количество запросов. Так что сравнение производительности Джеффа - основная мысль его ответа - уместно. По совпадению, комментарий Сэма вообще не касается этого. Думаю, он просто критикует GZip is simply deflate plus a checksum and header/footer вступление, которое может быть технически неправильным. - person Evgeniy Berezovsky; 28.06.2014
comment
Извините, но вы, кажется, сравниваете яблоки с апельсинами. Deflate - это алгоритм сжатия, а GZip - это формат файла. Единственная разница в том, что GZip вычисляет контрольную сумму (CRC-32). - person mar; 23.07.2017
comment
CRC-32 медленный, Adler32 тоже медленный. Они могут легко составить лишние 20-40%. Так что, естественно, быстрее нет контрольной суммы. Но тогда вы также не можете обнаружить поврежденные потоки. - person mar; 23.07.2017

Скорее всего, вы не сможете выбрать дефляцию в качестве опции. Вопреки тому, что вы могли ожидать, mod_deflate использует не deflate, а gzip. Таким образом, хотя большинство высказанных соображений верны, для большинства они, скорее всего, не актуальны.

person Amblyopius    schedule 12.12.2012

Основная причина в том, что deflate кодируется быстрее, чем gzip, и на загруженном сервере, что может иметь значение. Со статическими страницами - другой вопрос, поскольку их легко предварительно сжать один раз.

person Joachim Sauer    schedule 23.12.2008
comment
предположительно с помощью gzip вы не можете начать передачу заголовка, пока не получите, не сохраните и не сжимаете все данные? (потому что вам нужна контрольная сумма для создания заголовка) - person OJW; 30.06.2009
comment
В формате gzip контрольная сумма прибывает в конец файла, в частности, чтобы можно было начать писать блоки deflate по мере их обработки, не задерживая все. - person Jack Lloyd; 20.10.2009

Я думаю, что нет большой разницы между deflate и gzip, потому что gzip - это просто заголовок, обернутый вокруг deflate (см. RFC 1951 и 1952).

person schnaader    schedule 23.12.2008

mod_deflate требует меньше ресурсов на вашем сервере, хотя вы можете заплатить небольшой штраф с точки зрения степени сжатия.

Если вы обслуживаете много небольших файлов, я бы рекомендовал провести сравнительный анализ и нагрузочное тестирование сжатых и несжатых решений - вы можете найти некоторые случаи, когда включение сжатия не приведет к экономии.

person Dave R.    schedule 23.12.2008
comment
Тем, кому интересно, с deflate мои текстовые файлы увеличиваются с 30 КБ до 10 КБ, поэтому файлы должны быть еще меньше, чтобы не было никакой экономии. Я предполагаю, что меньше 1 КБ или что-то в этом роде. - person GChuf; 21.12.2019

Не должно быть никакой разницы в gzip и deflate для декомпрессии. Gzip просто сдувается с несколькими десятками байтов, обернутыми вокруг него, включая контрольную сумму. Контрольная сумма - причина более медленного сжатия. Однако, когда вы предварительно сжимаете миллионы файлов, вы хотите, чтобы эти контрольные суммы использовались для проверки работоспособности вашей файловой системы. Кроме того, вы можете использовать инструменты командной строки для получения статистики по файлу. Для нашего сайта мы предварительно сжимаем тонны статических данных (весь открытый каталог, 13 000 игр, автозаполнение для миллионов ключевых слов и т. Д.), И мы оцениваем нас на 95% быстрее, чем все сайты по данным Alexa. Поиск по факсу. Однако мы используем собственный проприетарный веб-сервер. Apache / mod_deflate просто не справился. Когда эти файлы сжимаются в файловой системе, вы не только получаете удар для своего файла с минимальным размером блока файловой системы, но и все ненужные накладные расходы при управлении файлом в файловой системе, о которых веб-сервер может заботиться меньше. Вы должны беспокоиться об общем объеме диска, времени доступа / декомпрессии и, во-вторых, о скорости предварительного сжатия этих данных. Размер важен, потому что, хотя дисковое пространство дешевое, вы хотите, чтобы его как можно больше поместилось в кэш.

person Steven    schedule 20.10.2009
comment
GZip, вероятно, проверяет контрольную сумму при распаковке, отсюда и разница в скорости при распаковке. - person Seun Osewa; 05.11.2009

В Ubuntu с Apache2 и уже установленным модулем deflate (который установлен по умолчанию) вы можете включить сжатие gzip deflate в два простых шага:

a2enmod deflate
/etc/init.d/apache2 force-reload

И ты далеко! Я обнаружил, что страницы, которые я обслуживаю через подключение ADSL, загружаются намного быстрее.

Изменить: согласно комментарию @ GertvandenBerg, это включает сжатие gzip, а не дефляцию.

person aidan    schedule 22.04.2009
comment
Кроме того, что это включает gzip, поскольку mod_deflate сбивает с толку только сжатие gzip ... - person Gert van den Berg; 24.07.2014
comment
@GertvandenBerg Я обновил свой ответ, но для записи gzip is deflate, только с дополнительными заголовками и контрольной суммой - person aidan; 26.01.2018
comment
@aiden да, но контрольная сумма влияет на производительность ... (и raw deflate не соответствует стандарту) - person Gert van den Berg; 27.01.2018

если я правильно помню

  • gzip сжимает немного больше, чем сжимает
  • сдуть более эффективно
person JimmyJ    schedule 23.12.2008
comment
gzip выкачивается с заголовком. И HTTP 1.1 deflate на самом деле является zlib (который также является оболочкой для deflate) - person David Murdoch; 20.10.2009