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

196

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

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

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

  • 0
    поменял принятые ответы ... текущий консенсус два к одному в пользу gzip
  • 1
    mod_deflate для Apache 2, mod_gzip для Apache 1.3.
Теги:
compression
gzip
lamp
deflate

9 ответов

294
Лучший ответ

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

Простой ответ не.


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

deflate Формат "zlib", определенный в RFC 1950, в сочетании с механизмом сжатия "спуска", описанным в 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]. Этот формат является        Lempel-Ziv (LZ77) с 32-битным CRC.

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

Формат в настоящее время использует метод сжатия DEFLATE, но его можно легко расширить, чтобы использовать другие методы сжатия.

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

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

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

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


В последние годы во многих браузерах реализован неправильный алгоритм спуска. Вместо ожидания заголовка zlib в RFC 1950 они просто ожидали сжатую полезную нагрузку. Подобным же образом различные веб-серверы совершили ту же ошибку.

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

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

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


Итак, лучше всего избегать сползания, незначительное повышение скорости (из-за adler 32) не стоит риска сломанных полезных нагрузок.

  • 0
    Разве не должно быть нового стандарта, который объединяет adler32 с gzip?
  • 0
    Ваш URI не работает.
Показать ещё 3 комментария
165

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

gzip vs deflate graph

  • 0
    Кажется, в основном это контрольная сумма, которая будет соответствовать меньшей разнице в более быстрых системах.
  • 0
    На чипах Intel это не имеет большого значения, поскольку они получают эту причудливую инструкцию SSE4.2 "CRC32" ...
Показать ещё 10 комментариев
12

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

3

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

  • 0
    предположительно, с помощью gzip вы не можете начать передачу заголовка, пока не получите, не сохраните и не сожмете все данные? (потому что вам нужна контрольная сумма для создания заголовка)
  • 7
    В формате gzip контрольная сумма идет в конце файла, в частности, поэтому можно начинать запись блоков с дефляцией по мере их обработки, не задерживая все.
3

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

1

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

  • 0
    GZip, вероятно, проверяет контрольную сумму при распаковке, отсюда и разница в скорости при распаковке.
1

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

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

0

Только для справок в будущем:

В системе debian (я нахожусь на ubuntu) с Apache2 и уже установленным модулем дефляции (который он по умолчанию) вы можете включить сжатие дефляции двумя простыми шагами:

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

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

  • 5
    За исключением того, что это позволяет gzip, так как mod_deflate сбивает с толку только сжатие gzip ...
  • 0
    @GertvandenBerg Я обновил свой ответ, но для записи gzip является deflate, только с дополнительными заголовками и контрольной суммой
Показать ещё 1 комментарий
-5

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

  • gzip будет сжимать немного больше, чем выкачать
  • deflate более эффективен
  • 2
    gzip является дефлятом с заголовком. И HTTP 1.1 deflate - это на самом деле zlib (который также является оболочкой для deflate)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню