Какова самая быстрая система шаблонов для Python?

Jinja2 и Mako выглядят довольно быстро.

Как они сравниваются с (менее признанным, но, вероятно, достаточно хорошим для того, что я делаю) string.Template?

Ответ 1

Вот результаты популярных движков шаблонов для отображения таблицы 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. Оптимизированные версии используют интерполяцию строк во внутреннем цикле.

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

Ответ 2

Из jinja2 docs кажется, что string.Template является самым быстрым, если все, что вам нужно.

Без сомнения, вы должны попытаться удалить столько логики из шаблонов, сколько возможное. Но шаблоны без каких-либо логика означает, что вы должны делать все обработка в коде, который является скучным и глупо. Механизм шаблонов, который это поставляется с Python и называемый string.Template. Приходит без петли, и если условия и самый быстрый механизм шаблонов, который вы можете получить для Python.

Ответ 3

Если вы можете бросить кеширование в миксе (например, memcached), тогда выберите на основе функций и простоты использования, а не оптимизации.

Я использую Mako, потому что мне нравится синтаксис и функции. К счастью, это один из самых быстрых.

Ответ 4

В общем, вам придется выполнять профилирование, чтобы ответить на этот вопрос, поскольку это зависит от того, как вы используете шаблоны и для чего.

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

Ответ 5

Я думаю, что Cheetah может быть самым быстрым, поскольку он реализован в C.