Jinja2 и Mako выглядят довольно быстро.
Как они сравниваются с (менее признанным, но, вероятно, достаточно хорошим для того, что я делаю) string.Template?
Jinja2 и Mako выглядят довольно быстро.
Как они сравниваются с (менее признанным, но, вероятно, достаточно хорошим для того, что я делаю) string.Template?
Вот результаты популярных движков шаблонов для отображения таблицы HTML 10x1000.
Python 2.6.2 on a 3GHz Intel Core 2
Kid template 696.89 ms
Kid template + cElementTree 649.88 ms
Genshi template + tag builder 431.01 ms
Genshi tag builder 389.39 ms
Django template 352.68 ms
Genshi template 266.35 ms
ElementTree 180.06 ms
cElementTree 107.85 ms
StringIO 41.48 ms
Jinja 2 36.38 ms
Cheetah template 34.66 ms
Mako Template 29.06 ms
Spitfire template 21.80 ms
Tenjin 18.39 ms
Spitfire template -O1 11.86 ms
cStringIO 5.80 ms
Spitfire template -O3 4.91 ms
Spitfire template -O2 4.82 ms
generator concat 4.06 ms
list concat 3.99 ms
generator concat optimized 2.84 ms
list concat optimized 2.62 ms
Тест основан на код из тестов производительности Spitfire с некоторыми добавленными двигателями шаблонов и добавленными итерациями для повышения точности. Список и генератор concat в конце представляют собой ручной код Python, чтобы получить представление о верхнем пределе производительности, достигаемом путем компиляции в байт-код Python. Оптимизированные версии используют интерполяцию строк во внутреннем цикле.
Но прежде чем вы закончите, чтобы переключить механизм шаблонов, убедитесь, что это имеет значение. Вам нужно будет сделать довольно тяжелое кэширование и действительно оптимизированный код до того, как различия между компиляционными машинами шаблонов начнут иметь значение. Для большинства приложений хорошие абстракции, совместимость с инструментами проектирования, знакомство и другие вещи имеют гораздо большее значение.
Из jinja2 docs кажется, что string.Template является самым быстрым, если все, что вам нужно.
Без сомнения, вы должны попытаться удалить столько логики из шаблонов, сколько возможное. Но шаблоны без каких-либо логика означает, что вы должны делать все обработка в коде, который является скучным и глупо. Механизм шаблонов, который это поставляется с Python и называемый string.Template. Приходит без петли, и если условия и самый быстрый механизм шаблонов, который вы можете получить для Python.
Если вы можете бросить кеширование в миксе (например, memcached), тогда выберите на основе функций и простоты использования, а не оптимизации.
Я использую Mako, потому что мне нравится синтаксис и функции. К счастью, это один из самых быстрых.
В общем, вам придется выполнять профилирование, чтобы ответить на этот вопрос, поскольку это зависит от того, как вы используете шаблоны и для чего.
string.Template является самым быстрым, но настолько примитивным, что его вряд ли можно назвать шаблоном на одном дыхании, как другие системы шаблонов, поскольку он только заменяет строки и не имеет условий или циклов, что делает его практически бесполезным на практике.
Я думаю, что Cheetah может быть самым быстрым, поскольку он реализован в C.