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

Авторы решений:
Версия Drupal:

Задача

Ускорить загрузку файлов CSS и JS за счёт сжатия на сервере и передачи сжатой копии браузеру.

Решение


Косметический ремонт и покраска фасадов фасадные работы. | Комфортно водогрейные котлы на твердом топливе. | бесплатные объявления | подать объявление бесплатно | лекарство от простатита

Варианты

  • Автоматическое сжатие сервером
  • Создать вручную архивную копию каждого 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 ветке)

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

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

mod_gzip - сжатие html страниц `на лету`

Creative Commons: ­Attribution-Share Alike 2.5

Данные материалы выложены под лицензией Creative Commons: ­Attribution-Share Alike 2.5. Это значит, что вы можете распространять, копировать и модифицировать эти произведения при условии упоминания авторства оригинала, и при условии, что они также будут распространяться на условиях этой лицензии (то есть, изменённую работу нельзя защитить копирайтом). Подробнее смотри: http://ru.wikipedia.org/wiki/Creative_Commons