Шаблонизатор встроенный в nginx

Валентин Бартенев ne на vbart.ru
Чт Сен 30 21:11:26 MSD 2010


Приветствую.

Я написал модуль для nginx. Суть его в том, что я встроил в сервер виртуальную 
машину шаблонизатора CT++ http://ctpp.havoc.ru/whatis.html

Работает он очень просто. Вы посылаете данные в формате JSON, а и 
устанавливаете еще один http заголовок:
X-Template: путь/к/скомпилированному/cttp/шаблону

На выходе получаем готовенький HTML! Поскольку CT++ написан на С++ и перед 
использованием шаблоны необходимо компилировать в особый байт-код, который 
понимает его виртуальная машина все это происходит максимально быстро. Не 
сильно ошибусь если скажу, что это один из быстрейших шаблонизаторов на 
планете, если не самый быстрый. Генерация большинства шаблонов занимает 
микросекунды (именно, микро, не милли).

Но какие же мы еще получаем плюшки, помимо экстремальной производительности 
шаблонизации?

1) JSON компактнее чем результирующий HTML -> меньше данных пересылается между 
сервером и бэкэндом.
2) Вы можете использовать тот же самый json, что вы отдаете на ajax запросы, 
упрощается логика приложения. AJAX запрос отдаем JSON без X-Template 
заголовка, обычный запрос - отдаем тот же самый JSON но с X-Template 
заголовком.
3) Вы можете вообще proxy-pass ваш nginx в CouchDB которая и так отдает данные 
в json. В этом случае вам ВООБЩЕ не нужно писать северную часть для многих 
задач.
4) Можете вообще больше не заморачиваться с выбором шаблонизатора, выбор 
очевиден. Решение универсально, пишите ли вы на python, ruby, perl, erlang или 
на худой конец на php.

Вот такие плюшки. И это еще не все, будет больше... =)

Скачать:
https://dev.vbart.ru/attachments/download/10/ngx_ctpp2-0.1.tar.gz

или из SVN: svn co svn://vbart.ru/ngx_ctpp2/tags/0.1

Учтите, что это первая публичная бета. Перед сборкой необходимо сперва 
установить СT++ 2.6.5:
http://ctpp.havoc.ru/install.html
http://ctpp.havoc.ru/download/

Проверял на nginx 0.8.52

Жду отзывов и пожеланий. Нормальная документация, презентации и замеры 
производительности будут, но позже.


Также хочу выразить огромную благодарность Игорю Сысоеву за такой 
замечательный веб-сервер. Ровно неделю назад я первый раз заглянул в его 
исходники. Я могу с уверенность утверждать, что за эту неделю я стал чуть 
умнее.

Спасибо Валерию Холодкову, который подсказал мне в этой рассылке отличную 
реализацию чтения файла в nginx.

--
Валентин Бартенев


Подробная информация о списке рассылки nginx-ru