Re: Стабильным релизом будет версия 1.0

Валентин Бартенев ne на vbart.ru
Пт Окт 1 00:12:35 MSD 2010


Почитайте TODO, что я вложил в архив. Опубликую его здесь, наверное надо было 
сразу это сделать в первом сообщении:

 * Возможность установки в nginx.conf корневой папки для шаблонов.
 * Инициализация виртуальной машины на старте. Сейчас это происходит каждый 
запрос, что слегка негативно сказывается на производительности.
 * Возможность указывать пути к шаблонам в nginx.conf и кэшировать их в 
памяти.
 * Небольшие проверки байт-кода перед запуском виртуальной машины. Сейчас один 
из рабочих процессов nginx умирает, если случайно подсунуть ему вместо 
откомпилированного шаблона что-то другое.
 * Написать нормальный VM logger класс. В настоящий момент это просто 
заглушка.

Так что, все что вы перечислили запланировано и появится в ближайших версиях. 
Просто мне хотелось подогреть интерес, тем более, что и 0.1 уже вполне 
юзабельна, хотя и далеко не очень удобно все.

Я планирую сделать так. Для шаблонов четко прописанных в nginx.conf в каком-
либо месте template: путь/до/шаблона, можно установить флаг cache и тогда эти 
шаблоны будут загружены в разделяемую память еще на этапе запуска сервера и 
хранится там в быстрой хэш-таблице.

Опцию template_root я хотел тоже ввести, но несколько с другой целью, то что 
вы описали во втором пункте будет делать опция template, а template_root будет 
указывать корневую папку для путей до шаблонов, которые заданы относительно. 
Например если запрос придет X-Template: users/list.ct2
и root_template: /srv/www/somesite/templates, то подгружен будет: 
/srv/www/somesite/templates/users/list.ct2

Таким же образом template_root будет влиять и на пути заданные в директиве 
template: если они указаны относительно (не начинаются с /).

Возможно когда-нибудь позднее появится и просто общий разделяемый адаптивный 
кэш, для которого будет задаваться размер, и в который будут автоматически 
попадать часто запрашиваемые шаблоны. Для этого я наверное воспользуюсь 
алгоритмами red-black деревьев, что реализованы в nginx.

Но уже сейчас надо отметить, я тестировал, все работает ооочень шустро, я 
цеплял cherrypy через proxypass и django через uwsgi, и сравнивал просто 
отдачу статической html прописанной прямо в питон коде, с отдачей json 
прописанной в нем же. Шаблон был не простой, взял бенчмарк, что прилагался к 
ctpp... Так вот, req/sec были сопоставимы, разница в пределах 5-10% и это 
статика vs. шаблонизация, среднее время ответа было в менее 2мс на моей 
машинке, и это с учетом влияния бэкенда.

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

> О! Моя мечта! Как ни странно, я как раз собирался нечто подобное сделать.
> 
> Я не знал, что ctpp 2.x может брать байткод из отдельного файла. Это
> несколько меняет ситуацию. Во всяком случае есть несколько вопросов:
> 
> 1) Нет ли желания хранить шаблон в разделяемой памяти или хотя бы делать
> mmap на файл с шаблоном? Иначе потребление памяти возрастает на (Длина
> шаблона x Число одновременных запросов к шаблону) + Накладные расходы
> 
> 2) Нельзя сделать так, чтобы путь к шаблону определялся по uri если нет
> заголовка X-Template? Например так:
> 
> location /foo {
>      template_root /var/www/site.ru/template;
> 
>      [...]
> 
> }
> 
> Ответ на запрос /foo/bar использует шаблон /var/www/site.ru/template/bar
> 
> Валентин Бартенев пишет:
> > Я думаю, что с этим пока лучше чуть повременить, сперва надо получить
> > первые хорошие отзывы, и позаботится обо всех критических вещах из TODO.
> > 
> > Версия слишком сырая.
> > 
> > По крайней мере необходима возможность установки корневой папки для
> > шаблонов в настройках nginx (но это очень просто), перенести
> > инициализацию VM в другое место на стадию конфигурации и добавить
> > проверку байт-кода, чтобы он не падал, когда ему некорректный шаблон
> > подсовываешь.


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