Какая самая быстрая система шаблонов для 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.

Другие вопросы по тегам