Jinja2 и Mako, по-видимому, довольно быстры.
Как они соотносятся с (менее популярными, но, вероятно, достаточно хорошими для того, что я делаю) string.Template ?
Jinja2 и Mako, по-видимому, довольно быстры.
Как они соотносятся с (менее популярными, но, вероятно, достаточно хорошими для того, что я делаю) string.Template ?
Вот результаты популярных шаблонизаторов для рендеринга 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. Оптимизированные версии используют интерполяцию строк во внутреннем цикле.
Но прежде чем вы решите сменить механизм шаблонов, убедитесь, что это имеет значение. Вам нужно будет выполнить довольно тяжелое кэширование и действительно оптимизировать код, прежде чем различия между механизмами компиляции шаблонов начнут иметь значение. Для большинства приложений хорошие средства абстракции, совместимость с инструментами проектирования, знакомство и другие вещи имеют гораздо большее значение.
*_unsafe
из моей ранее предоставленной ссылки на страницу результатов. Наконец, что более важно, IMO, это время до первого байта (TTFB), поэтому результаты *_flush_first
.
- person amcgregor; 13.01.2020
Из документов jinja2 кажется, что string.Template является самым быстрым, если это все, что вам нужно. .
Без сомнения, вы должны попытаться удалить из шаблонов как можно больше логики. Но шаблоны без всякой логики означают, что всю обработку приходится делать в коде, что скучно и глупо. Механизм шаблонов, который делает это, поставляется с Python и называется string.Template. Поставляется без циклов и условий и, безусловно, является самым быстрым механизмом шаблонов, который вы можете получить для Python.
Если вы можете добавить кеширование (например, memcached), то выбирайте на основе функций и простоты использования, а не оптимизации.
Я использую Mako, потому что мне нравится синтаксис и функции. К счастью, он также является одним из самых быстрых.
В общем, вам придется выполнить профилирование, чтобы ответить на этот вопрос, так как это зависит от того, как вы используете шаблоны и для чего.
string.Template является самым быстрым, но настолько примитивным, что его вряд ли можно назвать шаблоном в том же духе, что и другие системы шаблонов, поскольку он выполняет только замену строк и не имеет условий или циклов, что делает его практически бесполезным.
Я думаю, что Cheetah может быть самым быстрым, так как он реализован на C.
ALL_UPPER_UND_SEP
(а-ля CGI), я подумал, господи, код C должен быть эффективным для этого, поэтому я позаимствовал соответствующий модуль C из Rack или другого веб-сервера Ruby. Это было 1000 строк C, сгенерированных машиной из Ruby. Python работал существенно быстрее, чем скомпилированный C, несмотря на повторные .replace()
вызовы и цепочки других фильтров (upper
и т. д.), и был бесконечно проще для понимания.
- person amcgregor; 26.03.2019
<table>
с 10 столбцами и 1000 строками из статического списка диктов. Чуть меньше 10 генераций в секунду. Любой современный парсер Движки /generator превосходят его (даже Mako в 2 раза быстрее), а мой собственный метод потоковой генерации оставляет его далеко позади. (Чуть менее 48 000 поколений в секунду: таким образом, производительность Cheetah составляет 0,02%, а не 2%. 0,02%.)
- person amcgregor; 19.04.2019
Clarify meaning without changing it.
иAdd related resources or links.
. Как вы можете видеть из комментария, набравшего наибольшее количество голосов, ссылка полезная, поэтому я добавил изображение на случай, если ссылка исчезнет. Позвольте мне также сказать, почему я отклонил ваше редактирование - нет никакого объяснения, почему вы возвращаетесь, и даже после прочтения статьи, на которую вы ссылаетесь, я не вижу никаких оснований для возврата. Я позволяю этому быть на вашем пути, даже если вы не автор, просто потому, что это не стоит хлопот. знак равно - person anatoly techtonik   schedule 31.01.2013: flush
, и теперь наши каналы начинают транслироваться мгновенно, и занимает не более 20 секунд в общей сложности. - person amcgregor   schedule 03.07.2019