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