2009-08-24 5 views
49

Jinja2 и Mako оба явно довольно быстро.Что такое самая быстрая система шаблонов для Python?

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

+2

"Сравнить"? Вы хотите сравнить скорость? Люди-джиньи говорят, что string.Template быстрее. Что еще нужно знать? Или вы хотите сравнить некоторые другие аспекты? –

+3

Возможно, вам все равно, насколько быстро работает система шаблонов. Среди популярных, все они имеют вполне приемлемые характеристики производительности. Пожалуйста, принимайте такие решения, основываясь на более важных вещах, таких как простота программирования. –

+0

Это зависит, действительно. Там, где я работаю, мы обслуживаем множество шаблонов в секунду, и у нас есть армия высококвалифицированных кодеров и дизайнеров, поэтому в этом контексте скорость важнее, чем «простота программирования». Более того, я бы сказал, что легкость чтения важнее, чем простота программирования. –

ответ

97

Вот результаты популярных шаблонных движков для рендеринга таблицы в 10x1000 HTML.

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 

Тест основан на code from Spitfire performance tests с некоторыми дополнительными механизмами шаблонов и добавленных итераций для повышения точности. Список и генератор concat в конце представляют собой ручной код Python, чтобы получить представление о верхнем пределе производительности, достигаемом путем компиляции в байт-код Python. Оптимизированные версии используют интерполяцию строк во внутреннем цикле.

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

+6

Я не знал, что шаблон Django - это тот налет. –

+1

Я тоже. Это небольшая часть уравнения для большинства, но если вы показываете таблицу данных 10x1000, у вас проблемы. – orokusaki

+23

Это сравнение, конечно, сильно зависит от того, что вы делаете. Что делать, если вы создаете множество небольших шаблонов, а не одну массивную таблицу? Тогда стали бы важны совершенно разные рабочие характеристики механизма шаблонов, такие как разбор шаблонов и время загрузки. Мораль? Принимайте решения по оптимизации на основе собственных тестов собственного кода. –

8

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

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

1

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

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

-2

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

+18

Просто потому, что что-то написано на C, это не значит, что оно будет быстрее; Эти вещи сильно зависят от разработчика. – kzh

+4

Да, что kzh истинно. Кроме того, Cheetah не написан на C - он написан на Python. Однако небольшая его часть, «mapper», может по желанию использовать гораздо более быструю, скомпилированную версию C. –

4

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^