Сжатие трафика

25 Май 2008
Опубликовано VladSavitsky

Решение

Варианты

  • Автоматическое сжатие сервером
  • Создать вручную архивную копию каждого JS/CSS и отдавать их вместо не сжатых файлов.
  • Использовать mod_deflate
  • Использование веб-сервера nginx для сжатия трафика

Автоматическое сжатие сервером

В файле .htaccess нужно прописать:

<IfModule mod_gzip.c>
      mod_gzip_on                   Yes
      mod_gzip_item_include         file       \.js$
      mod_gzip_item_include         file       \.css$
</IfModule>

Создать вручную архивную копию каждого JS/CSS и отдавать их вместо не сжатых файлов.

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

Упаковать *.js файлы в *.js.gz и закачать на сервер в ту же папку, где был оригинальный JS-файл.

В файле .htaccess (в корне сайта) сразу после RewriteEngine on добавить:

    RewriteRule ^(.*\.js\.gz)$ - [L]
    RewriteCond %{HTTP:Accept-Encoding} gzip
    RewriteCond %{REQUEST_FILENAME}.gz -f
    RewriteRule ^(.*)$ $1.gz

Проверка правильности работы

Загрузить в браузере страницу и посмотреть заголовки запроса:

  • Response Headers
  • Date Wed, 19 Mar 2008 12:32:09 GMT
  • Server Apache
  • Cache-Control max-age=1209600
  • Expires Wed, 02 Apr 2008 12:32:09 GMT
  • Last-Modified Wed, 19 Mar 2008 12:31:38 GMT
  • Etag "bdcf97-87d-47e107aa"
  • Accept-Ranges bytes
  • Content-Length 2173
  • Connection close
  • Content-Type application/x-gzip
  • Content-Encoding gzip

Размер полученного файла должен стать меньше...

Принцип работы

Решение о том, какой файл (сжатый или нет) отдать клиенту принимает mod_rewrite:

Принцип работы:
Если рядом с файлом javascript.js будет находиться его сжатая копия javascript.js.gz и в запросе будет явно указано, что клиент поддерживает gzip-encoding, то клиенту выдаётся сжатая копия. Если сжатие не поддерживается или сжатого файла нет в ответ вернётся оригинальный файл.

В результате трафик сервера и нагрузка на сервер снижается. То же самое можно сделать и для CSS.

Использовать mod_deflate

Krotty@drupal.org предложил:
mod_deflate в стандартной поставке apache 2.x :)

Использование веб-сервера nginx для сжатия трафика

VLAD_X предложил использовать nginx.
Он может просто сжимать статику на лету, а может в точности делать то, что вы хотите: отдавать сжатые файлы вместо несжатых. (Эта возможность появилось недавно в 0.6.x ветке)

Использованные материалы

Полезные ссылки

]]>]]>

Комментарии

У Вас в статье 2 существенных недочета
1. Content-Type application/x-gzip
половина браузеров его не поймут, им нужен нормальный тип
2. RewriteCond %{HTTP:Accept-Encoding} gzip
У Konqueror / Safari (windows) есть проблемы с восприятием сжатых файлов, их нужно также включать

Подробное решение описано в приведенной статье
http://webo.in/articles/habrahabr/07-gzip-all/
почему просто не использовать его?

P.S. Исправьте в названии поля для комментария "Домашняя старница" на "Домашняя страница"

sunnybear | Июн 14th, 2008 в 1:27 утра
 
 
 

RSS-лента новостей

Dries Buytaert по-русски
]]>Русский поиск Drupal]]>

Перенос сайта из Joomla в Drupal
Перенос сайта из WordPress в Drupal

]]> Drupal - это бесплатная система управления контентом с открытым исходным кодом ]]>