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

Этот FAQ является богатством информации Между той страницей и эта статья Joel Spolsky , у Вас будет хорошее начало.

Одно заключение я приехал в по пути:

  • wchar_t 16 битов в Windows, но не обязательно 16 битов на других платформах. Я думаю, что это - необходимое зло в Windows, но вероятно может избежаться в другом месте. Причина это важно в Windows, состоит в том, что Вам нужен он для использования файлов, которые имеют символы неASCII на имя (наряду с версией W функций).

  • Примечание, что Windows APIs, которые берут wchar_t строки, ожидает кодировку UTF-16. Обратите внимание также, что это отличается, чем UCS-2. Примите во внимание суррогатные пары. Этот тестовая страница имеет поучительные тесты.

  • , Если Вы программируете в Windows, Вы не можете использовать fopen(), fread(), fwrite(), и т.д. так как они только берут char * и не понимают кодировки UTF-8. Делает мобильность болезненной.

52
задан EBGreen 24 August 2009 в 08:30
поделиться

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 Performance tests с некоторыми добавленными шаблонизаторами и добавленными итерациями для повышения точности. Список и генератор concat в конце написаны вручную на Python, чтобы почувствовать верхний предел производительности, достижимый при компиляции в байт-код Python. Оптимизированные версии используют строковую интерполяцию во внутреннем цикле.

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

99
ответ дан 7 November 2019 в 09:16
поделиться

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

-3
ответ дан 7 November 2019 в 09:16
поделиться

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

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

10
ответ дан 7 November 2019 в 09:16
поделиться

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

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

1
ответ дан 7 November 2019 в 09:16
поделиться

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

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

3
ответ дан 7 November 2019 в 09:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: