Какая самая быстрая система шаблонов для Python? - PullRequest
52 голосов
/ 24 августа 2009

Джинджа2 и Мако оба довольно быстрые.

Как они сравниваются со строкой (менее функциональной, но, вероятно, достаточно хорошей для моей работы)

Ответы [ 5 ]

99 голосов
/ 25 августа 2009

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

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

10 голосов
/ 24 августа 2009

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

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

3 голосов
/ 09 ноября 2009

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

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

1 голос
/ 25 августа 2009

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

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

0 голосов
/ 25 августа 2009

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

...