Какая самая быстрая система шаблонов для Python?
Jinja2 и Mako оба довольно быстрые.
Как они соотносятся с (менее показанным, но, вероятно, достаточно хорошим для того, что я делаю) строкой. Шаблон?
5 ответов
Вот результаты популярных шаблонизаторов для рендеринга 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 кажется, что string.Template - самый быстрый, если это все, что вам нужно.
Без сомнения, вы должны попытаться удалить как можно больше логики из шаблонов. Но шаблоны без какой-либо логики означают, что вы должны выполнять всю обработку в коде, которая скучна и глупа. Шаблонный движок, который делает это, поставляется с Python и называется string.Template. Поставляется без циклов и, если условия, и, безусловно, является самым быстрым движком шаблонов, который вы можете получить для Python.
Если вы можете использовать кеширование в миксе (например, memcached), тогда выбирайте на основе возможностей и простоты использования, а не оптимизации.
Я использую Мако, потому что мне нравится синтаксис и особенности. К счастью, это один из самых быстрых.
В общем, вам придется выполнить профилирование, чтобы ответить на этот вопрос, так как это зависит от того, как вы используете шаблоны и для чего.
string.Template является самым быстрым, но настолько примитивным, что его едва ли можно назвать шаблоном на одном дыхании с другими системами шаблонов, поскольку он только выполняет замену строк и не имеет условий или циклов, что делает его довольно бесполезным на практике.
Я думаю, что Гепард может быть самым быстрым, так как он реализован на C.