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

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

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

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

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

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

Давайте рассмотрим, как можно настроить некоторые серверы для выдачи текстового содержания в виде архивов. Ниже приведен участок конфигурационного кода для Apache 1.3, позволяющий подключить gzip-сжатие. Основные директивы даны с комментариями.

<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

Для 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