Мациевский Николай - Разгони свой сайт стр 7.

Шрифт
Фон

Что быстрее: gzip или канал?

Так как с пользовательской стороны уходит некоторое время на распаковку архива, то ограничим его временем сжатия на машине с CPU в 1 ГГц. Это ограничение сверху: естественно, что распаковка экономичнее сжатия, да и пользовательские машины имеют процессоры в среднем мощнее, чем 1 ГГц. Однако нам нужно получить лишь качественные данные (ограничение снизу), поэтому ограничимся таким уровнем точности.

Итак, ниже приведены издержки на передачу дополнительного количества информации (в миллисекундах) для двух разных каналов (100 Кб/с и 1500 Кб/с) и двух разных серверов (280 МГц и 1 ГГц). Видно, что график для gzip на 1000 МГц идет практически вровень с передачей данных для канала в 1500 Кб/с (одна линия перекрывает другую).

Рис. 2.4 . Накладные издержки на сжатие и передачу информации для 100 Кб и 1500 Кб и 280 МГц и 1000 МГц

Исследование степени gzip-сжатия и загрузки процессора

Рассмотрим далее, насколько сильно издержки на gzip зависят от степени сжатия, и как их прогнозировать с учетом всех остальных параметров. Новая серия тестов была направлена на установление зависимости между степенью сжатия, процессорными издержками и уменьшением размера файла, чтобы на основе этих данных построить более точную модель, определяющую рациональность использования архивирования «на лету».
Как и ранее, на сервере проводились серии тестов по 10000 итераций в каждом. Замерялось время работы gzip при различных степенях сжатия. Затем оно усреднялось по серии, и из него вычитались издержки на работу с файловой системой. Также замерялось достигнутое уменьшение размера файла. Для зависимости «процессорное время степень сжатия» был получен следующий график. По оси абсцисс идет степень сжатия, по оси ординат затраченное время (среднее по серии).
Рис.2.5. Издержки на gzip от степени сжатия
Далее график эффективности полученного сжатия (в % от оригинального размера файлов) от степени сжатия.
Рис. 2.6. Эффективность различных степеней gzip-сжатия

Окончательные выводы

Хочется также обратить внимание на то, что, отдав пользователю данные быстрее (через gzip-сжатие), мы тем самым освободим часть серверных ресурсов, что может оказаться существенным подспорьем для высоконагруженных проектов.

В общем случае gzip-сжатие позволяет существенно ускорить доставку HTML-файла пользователю, не увеличивая нагрузку на сервер. Если же использовать статическое архивирование (готовые архивы хранить на сервере и обновлять только в случае необходимости), то выгода просто очевидна.

Конфигурируем Apache 1.3

<IfModule

mod_gzip.c>

# включаем gzip

mod_gzip_on Yes

# если рядом с запрашиваемым файлом есть сжатая версия с расширением .gz, то

# будет отдана именно она, ресурсы CPU расходоваться не будут

mod_gzip_can_negotiate Yes

# используем при статическом архивировании расширение .gz

mod_gzip_static_suffix .gz

# выставляем заголовок Content-Encoding: gzip

AddEncoding gzip .gz

# выставляем минимальный размер для сжимаемого файла

mod_gzip_minimum_file_size 1000

# и максимальный размер файла

mod_gzip_maximum_file_size 500000

# выставляем максимальный размер файла, сжимаемого прямо в памяти

mod_gzip_maximum_inmem_size 60000

# устанавливаем версию протокола, с которой будут отдаваться gzip-файлы

# на клиент

mod_gzip_min_http 1000

# исключаем известные проблемные случаи

mod_gzip_item_exclude reqheader "User-agent: Mozilla/4.0[678]"

# устанавливаем сжатие по умолчанию для файлов .html

mod_gzip_item_include file \.html$

# исключаем .css / .js файлы (о них подробнее в следующем разделе)

mod_gzip_item_exclude file \.js$

mod_gzip_item_exclude file \.css$

# дополнительно сжимаем другие текстовые файлы

mod_gzip_item_include mime ^text/html$

mod_gzip_item_include mime ^text/plain$

mod_gzip_item_include mime ^httpd/unix-directory$

# отключаем сжатие для картинок (не дает никакого эффекта)

mod_gzip_item_exclude mime ^image/

# отключаем 'Transfer-encoding: chunked' для gzip-файлов, чтобы

# страница уходила на клиент одним куском

mod_gzip_dechunk Yes

# добавляем заголовок Vary для корректного распознавания браузеров,

# находящихся за локальными прокси-серверами

mod_gzip_send_vary On

</IfModule>

Конфигурируем Apache 2

# добавляем Content-Type для всех файлов с расширением .gz

AddEncoding gzip .gz

# включаем сжатие для HTML- и XML-файлов

AddOutputFilterByType DEFLATE text/html

AddOutputFilterByType DEFLATE text/xml

# и для иконок (об этом чуть ниже)

AddOutputFilterByType DEFLATE image/x-icon

# выставляем максимальную степень сжатия (если возникнут проблемы с

# серверной производительностью, следует уменьшить до 7 или 1)

DeflateCompressionLevel 9

# и максимальный размер окна для архивирования

DeflateWindowSize 15

# отключаем архивирование для «проблемных» браузеров

BrowserMatch ^Mozilla/4 gzip-only-text/html

BrowserMatch ^Mozilla/4\.0[678] no-gzip

BrowserMatch \bMSIE !no-gzip !gzip-only-text/html

# добавляем заголовок Vary для корректного распознавания браузеров,

# находящихся за локальными прокси-серверами

Header append Vary User-Agent

# и запрещаем кэширование сжатых файлов для локальных прокси-серверов

Ваша оценка очень важна

0
Шрифт
Фон

Помогите Вашим друзьям узнать о библиотеке