28 дек. 2009 г.

Django compressor.

Давненько заглядывался на django-compress, но всякий раз пугался групп для css и js файлов. Дело в том, что процессе непрекращающегося deadline’а я постоянно дописываю стили в новые файлы или прям в шаблоны. Вечно потом пытаюсь разобраться в этом беспорядке, но как правило, прихожу к выводу, что некоторым стилям, или “приглашенным” js-скриптам в общем наборе делать нечего.

Пример: на сайте http://72arenda.ru/ есть форма заказа. Сейчас jquery + ui грузятся для всего сайта, но раньше было правильней – набор грузился только на странице бронирования, где эти скрипты и были востребованы. Подобных примеров в моих проектах много.

Альтернатива django-compress’у - Django compressor, использует другой подход. После подключения приложения ‘compressor’ в INSTALLED_APPS нужно прям в шаблонах заворачивать конструкции вызова или описания css или js файлов в специальные templatetag’и.

Пример с сайта:


{% load compress %}



{% compress css %}

<link rel="stylesheet" href="/media/css/one.css" type="text/css" charset="utf-8">

<style type="text/css">p { border:5px solid green;}</style>

<link rel="stylesheet" href="/media/css/two.css" type="text/css" charset="utf-8">

{% endcompress %}



{% compress js %}

<script src="/media/js/one.js" type="text/javascript" charset="utf-8"></script>

<script type="text/javascript" charset="utf-8">obj.value = "value";</script>

{% endcompress %}


Django compressor заменит стили на

<link rel="stylesheet" href="/media/CACHE/css/f7c661b7a124.css" type="text/css" media="all" charset="utf-8">


а js на



<script type="text/javascript" src="/media/CACHE/js/3f33b9146e12.js" charset="utf-8"></script>


То есть, на кешированные, собранные в один файл, почищенные наборы стилей и скриптов.



UPD. Как выяснилось поздней, фильтры по умолчанию ничего не делают с содержимым файлов - не жмут, не чистят, не обфусцируют. Для активации фильтров нужно ставить yui-compressor или google closure, т.к. csstidy у меня работать отказался – жалуется, что не знает переменную css.



Compressor не делает ничего, если включен дебаг режим (DEBUG = True).



Компрессору нужен BeautifulSoup, так что проследите, чтоб он у вас был установлен.



К сожалению, пока не удалось разобраться в том, что является критерием “перестройки” кеш-файлов. В скриптах есть строка “Rebuilds the cache once a day if nothing has changed.” – Очевидно, перестройка происходит чаше, если что-то меняется (я проверял. каждый раз, когда я что-то менял, происходила “перестройка”).



Подобные инструменты нужно использовать в паре с методикам и описанными на странице http://code.google.com/p/django-compress/wiki/FarFutureExpires для достижения большего эффекта.



Успехов в освоении Django compressor и с наступающим!

4 комментария:

Crazyzubr комментирует...

Compressor не делает ничего, если включен дебаг режим (DEBUG = True).

если стоит настройка COMPRESS_ENABLED=True то делает в любом случае.

Ivan Markeev комментирует...

Наверняка что-нибудь изменилось с 2009 года )))

Crazyzubr комментирует...

Вполне возможно =) Наверное, будет кстути также сказать, что можно обойтись без бьютифулсоупа, поставив настройку COMPRESS_PARSER на что либо иное, например на, compressor.parser.LxmlParser


З.Ы. Защита слишком жесткая на комментарии :(

Ivan Markeev комментирует...

Да, ваша правда - защита слишком жестка, но на удаление рекламы тратится очень много времени. Прошу прощения, за неудобства.