Jinja2 и Mako оба явно довольно быстро.Что такое самая быстрая система шаблонов для Python?
Как это сравнить с (чем меньше, но, вероятно, достаточно хорошо для того, что я делаю) string.Template?
Jinja2 и Mako оба явно довольно быстро.Что такое самая быстрая система шаблонов для Python?
Как это сравнить с (чем меньше, но, вероятно, достаточно хорошо для того, что я делаю) string.Template?
Вот результаты популярных шаблонных движков для рендеринга таблицы в 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. Оптимизированные версии используют интерполяцию строк во внутреннем цикле.
Но прежде чем вы столкнетесь, чтобы переключить механизм шаблонов, убедитесь, что это имеет значение. Вам нужно будет сделать довольно тяжелое кэширование и действительно оптимизированный код до того, как различия между компиляционными машинами шаблонов начнут иметь значение. Для большинства приложений хорошие абстракции, совместимость с инструментами проектирования, знакомство и другие вещи имеют гораздо большее значение.
Я не знал, что шаблон Django - это тот налет. –
Я тоже. Это небольшая часть уравнения для большинства, но если вы показываете таблицу данных 10x1000, у вас проблемы. – orokusaki
Это сравнение, конечно, сильно зависит от того, что вы делаете. Что делать, если вы создаете множество небольших шаблонов, а не одну массивную таблицу? Тогда стали бы важны совершенно разные рабочие характеристики механизма шаблонов, такие как разбор шаблонов и время загрузки. Мораль? Принимайте решения по оптимизации на основе собственных тестов собственного кода. –
Из jinja2 docs кажется, что string.Template является самым быстрым, если это все, что вам нужно.
Без сомнения, вы должны попытаться удалить как можно больше логики от шаблонов, как возможно. Но шаблоны без какой-либо логики означают, что вы должны выполнить всю обработку в ракурсе и глупо. Механизм шаблона, который делает это с Python и , называется string.Template. Приходит без циклов, и если условия и на данный момент являются самым быстрым движком шаблонов, вы можете получить для Python.
В целом вам нужно будет выполнить профилирование, чтобы ответить на этот вопрос, так как это зависит от того, как вы используете шаблоны и для чего.
string.Template является самым быстрым, но настолько примитивным, что его вряд ли можно назвать шаблоном на одном дыхании, как и другие системы шаблонов, поскольку он только заменяет строки и не имеет условий или циклов, что делает его довольно бесполезным в практика.
Я думаю, что гепард может быть самым быстрым, как это реализовано в С.
Просто потому, что что-то написано на C, это не значит, что оно будет быстрее; Эти вещи сильно зависят от разработчика. – kzh
Да, что kzh истинно. Кроме того, Cheetah не написан на C - он написан на Python. Однако небольшая его часть, «mapper», может по желанию использовать гораздо более быструю, скомпилированную версию C. –
Если вы можете бросить кеширование в миксе (например, memcached), тогда выберите на основе функций и простоты использования, а не оптимизации.
Я использую Mako, потому что мне нравится синтаксис и функции. К счастью, это один из самых быстрых.
"Сравнить"? Вы хотите сравнить скорость? Люди-джиньи говорят, что string.Template быстрее. Что еще нужно знать? Или вы хотите сравнить некоторые другие аспекты? –
Возможно, вам все равно, насколько быстро работает система шаблонов. Среди популярных, все они имеют вполне приемлемые характеристики производительности. Пожалуйста, принимайте такие решения, основываясь на более важных вещах, таких как простота программирования. –
Это зависит, действительно. Там, где я работаю, мы обслуживаем множество шаблонов в секунду, и у нас есть армия высококвалифицированных кодеров и дизайнеров, поэтому в этом контексте скорость важнее, чем «простота программирования». Более того, я бы сказал, что легкость чтения важнее, чем простота программирования. –