Обновление блога #2 Django 28.11.2010

updated.png Давно хотел сменить django-mingus на что-то более легкое и гибкое. С прошествием времени, в mingus'e стало напрягать излишество разных модулей, которыми я не пользовался. Если начать отключать модули, которыми точно не пользуешься, то начинает валится какая-то другая часть (как это было бы не странно, но связанность между компонентами оказалась довольна таки тесной). Еще в последние время начали приходить exception'ы с обнаруженными дубликатами кешей заметок (есть подозрение, что виноват django-proxy) и в это время пользователь видел страницу с ошибкой 500, что не допустимо.

Для дизайна отправной точкой взял шрифт, который когда-то использовал на свой не большой юбилей в честь 200 поста. Текст логотипа хотел сделать через @font-face, но оказалось в Chrome, Opera выбранный шрифт отображается нормально, а вот Firefox 3.6 не понравился шрифт - получилось какое-то месиво из букв и не было видно полосатых линий :( пришлось использовать олдскульный метод - png-файл.

В бекенде получилось 13 приложений, против 34 в mingus'e (не учитывая родных django'вский приложений) и 21 таблица против ~60 в mingus'e (с учетом родных таблиц django). Для редактирования текста заметок оставил markdown - удобная вещь! Пинг о новых заметках теперь получает не только google (встроенная фишка django) но и yandex.

Стандартный django'вский шаблонизатор заменил на Jinja2. Перед заменой были небольшие сомнения - а стоит ли оно того и будет ли хоть какой-то выигрыш в скорости, читал несколько лестных отзывов о Jinja2 но не видел реальных цифр производительности. Так же не хотелось переписывать темплейтные фильтры и теги (лень, знаете ли :)).

На быструю руку своял тестировщик: БД с двумя полями, первое поле - текст случайной длины (lorem ipsum), второе - случайное число. Всего 500 записей. При выводе всех записей в html-таблицу django'вский шаблонизатор показал скорость - 0.5 сек., а jinja2 - 0.04 сек. Выигрыш в скорости почти в 13 раз. Еще сравнение jinja2 и других шаблонизаторов есть тут.

Для облегчения внедрения jinja2 существует модуль coffin, в котором уже реализован render_to_response и некоторые из часто используемых джанговских тегов/фильтров, с полным списком можно ознакомится на странице проекта.

Подгонка существующих тегов и фильтров под jinja2 много времени не заняло, выше упомянутый coffin значительно облегчил весь процесс. Хороший пост про связку jinj2 и django - Using Jinja2 with Django (via Coffin).

Я форкнул coffin и добавил в него несколько фич, которые еще облегчают использование jinja2, одна из них - декоратор @render_to (позаимствованный из django-annoying), который можно получить уже сейчас

git clone git://github.com/proft/coffin.git

остальные изменения причешу и тоже залью на github.

Для сжатия файлов с css-стилями и javascript'ов есть отличный модуль jccompressor - проверено, отлично работает с jinja2.

Дополнительно чтиво о Jinja2:

Осталась одна небольшая дилема - стоит ли в rss фид отдавать весь текст поста или только заголовок?

Цитата
Способность видеть чудесное в обыкновенном - неизменный признак мудрости.
Эмерсон
Категории
Архив