Зачем использовать deflate вместо gzip для текстовых файлов, обслуживаемых Apache? - PullRequest
205 голосов
/ 23 декабря 2008

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

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

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

Ответы [ 9 ]

307 голосов
/ 25 марта 2012

Зачем использовать 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 * на 1039 * медленнее, чем 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) не стоит риска поломки полезных нагрузок.

168 голосов
/ 23 декабря 2008

GZip - это просто deflate плюс контрольная сумма и верхний / нижний колонтитулы. Deflate быстрее , хотя, как и , я научился трудному пути.

gzip vs deflate graph

14 голосов
/ 12 декабря 2012

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

3 голосов
/ 23 декабря 2008

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

3 голосов
/ 23 декабря 2008

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

1 голос
/ 23 декабря 2008

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

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

0 голосов
/ 20 октября 2009

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

0 голосов
/ 22 апреля 2009

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

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

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

Редактировать: Согласно комментарию @ GertvandenBerg, это позволяет сжимать gzip, а не выжимать.

0 голосов
/ 23 декабря 2008

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

  • gzip сжимает чуть больше, чем выкачивает
  • более эффективный дефлат
...