<?xml version="1.0" encoding="UTF-8" ?><oembed><version>1.0</version><provider_name>Чудо{вищные} заметки</provider_name><provider_url>https://miracle.rpz.name</provider_url><author_name>MiRacLe</author_name><author_url>https://miracle.rpz.name/author/miracle/</author_url><title>jspacker и другие приключения Шурика</title><html>Напишу-ка я ещё разок про &lt;a href=&quot;http://dean.edwards.name/packer/&quot;&gt;packer&lt;/a&gt;. &lt;a href=&quot;http://phing.info&quot;&gt;phing&lt;/a&gt;, &lt;strike&gt;нормы бухгалтерского учёта&lt;/strike&gt; и ещё про чё-то.

В предыдущей своей чудовищной заметке &lt;a href=&quot;http://miracle.rpz.name/2006/09/15/javascript-lint-and-compress/&quot;&gt;про компрессию javascript-ов&lt;/a&gt; я упоминал perl-версию packer-а Дэна Эдвардса.
Её приходилось запускать через exec (и соответственно нужен perl). А вот совсем недавно нашёл &lt;a href=&quot;http://joliclic.free.fr/php/javascript-packer/en/&quot;&gt;реализацию этого мега-алгоритма на php&lt;/a&gt;  и даже &lt;a href=&quot;http://agachi.name/weblog/archives/2006/11/25/pack-your-javascript.htm&quot;&gt;не одну&lt;/a&gt;.

Соответственно первая реализация была &quot;впендюрена&quot; в phing.task.ext.JsPacker.Task, а вторая напомнила о том что давно собирался изложить.
А именно - про &lt;b&gt;gzip-сжатие js-файлов&lt;/b&gt;:

Собственно проблем ровно никаких - mod_gzip в apache, gzip on; в &lt;a href=&quot;http://sysoev.ru/nginx/&quot;&gt;nginx&lt;/a&gt; и можно тему закрывать. Но как обычно &quot;есть нюансы&quot;: не всегда эти  модули установлены на сервере, не всегда их получается установить, ну и главный &quot;нюанс&quot;: файлы статические, закономерно возникает мысль - зачем их &lt;b&gt;упаковывать при каждом запросе&lt;/b&gt;? Вот об этом я и хотел рассказать&lt;strike&gt;, но не буду&lt;/strike&gt; ;o)

Собственно решение прямо в лоб - &lt;b&gt;упаковать файлы один раз&lt;/b&gt; и &quot;задеплоить&quot; на сервер. Я это(сжатие) делаю с помощью всё того же phing-а, а решение о том какой файл (сжатый или нет) отдать клиенту принимает mod_rewrite:
&lt;blockquote&gt; RewriteEngine on
RewriteRule ^(.*\.js\.gz)$ - [L]
RewriteCond %{HTTP:Accept-Encoding} gzip
RewriteCond  %{REQUEST_FILENAME}.gz        -f
RewriteRule ^(.*)$ $1.gz&lt;/blockquote&gt;
Это содержимое .htaccess который лежит в директории с js (или httpd.conf в секции Directory/Location отвечающей за эту же директорию).

Смысл вроде прозрачен, но я поясню - если рядом с файлом moi-super-bolshoy-javascript.js будет находиться его сжатая копия moi-super-bolshoy-javascript.js.gz и в запросе будет явно указано, что клиент поддерживает gzip-encoding, то ему(клиенту) выдадут именно сжатую копию. В противном случае (сжатие не поддерживается или сжатого файла нет) в ответ вернётся оригинальный файл.

В итоге &lt;b&gt;уменьшили трафик сервера&lt;/b&gt;(и естественно клиентов)  и &lt;b&gt;снизили нагрузку на сервер&lt;/b&gt;.

Естественно этот фокус можно (и даже наверное нужно) проделать с css.

&lt;b&gt;P.S.&lt;/b&gt;
Далеко не все файлы стоит упаковывать зипом . И не каждый файл стоит упаковывать packer-ом - стоит проверить результат на &lt;a href=&quot;http://www.javascriptlint.com/&quot;&gt;jsl&lt;/a&gt;(int)-ом - не редки случаи &quot;поломки&quot; скриптов. Ну а как упаковать оптимальнее - решать индивидуально с каждым файлом предстоит вам.

&lt;b&gt;Update&lt;/b&gt;

А вот нашёлся &lt;a href=&quot;http://habrahabr.ru/blog/webdev/33868.html&quot;&gt;способ отдачи gzip-ованного контента&lt;/a&gt; даже лучший, чем описал я.</html><type>rich</type></oembed>