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