Почему этот шаблон Jinja2 не рендерит быстрее, чем Djangos? - PullRequest
6 голосов
/ 30 ноября 2011

Мне было любопытно посмотреть, насколько быстрее Jinja2 (2.6) был по сравнению со стандартным движком шаблонов Django (1.3.1).

Запустив его, я получаю:

Django: 275.729 ms per iteration
Jinja2: 281.190 ms per iteration

(чем меньше, тем лучше)

Вот тест Django: http://hastebin.com/DyGcxEybYd.py

Вот тест Jinja2: http://hastebin.com/uorDENWrkM.py

Для справки, тот же самый шаблонный тест Tornado удастся выполнить в 28.127 ms per iteration, что примерно в 10 раз быстрее, что почти слишком хорошо, чтобы быть правдой.

Тот же эталонный тест Торнадо: http://hastebin.com/F9PcqGb2sZ.py

ОБНОВЛЕНИЕ

К сожалению, объяснение состоит в том, что OSX ненадежен для выполнения тестов.Это может быть только ОС или то, что я запускаю кучу других приложений с графическим интерфейсом, таких как браузеры, с слишком большим количеством вкладок.Пытаясь все это снова на сервере Debian при очень низкой нагрузке, я получаю следующие цифры:

(manually rounded from having run it many times over a long period)
Django: 475 ms per iteration
Jinja2: 16 ms per iteration 
Tornado: 50 ms per iteration

Моя рабочая среда - OSX, но все серверы - Linuxy, так что это меня устраивает.

1 Ответ

3 голосов
/ 01 декабря 2011

Я не могу воспроизвести ваши результаты. Я использовал ваши тестовые файлы и сгенерировал пустой проект Django с

django-admin.py startproject foo && cd foo

С Tornado 2.1.1 я получаю согласованное 45 мс за итерацию. С Django 1.3.1 я получаю 480мс за итерацию.

Для Jinja2 я провел 4 теста. 2.5.2 и 2.6 с и без MarkupSafe :

2.5.2:

  • с безопасностью разметки: 19 мс
  • без: 14мс

2,6

  • Вт /: 14мс
  • без: 15 мс

Мне интересно, что MarkupSafe на самом деле значительно замедляет 2.5.2 (хотя все еще только 5 мс), хотя это может быть из-за того, что у меня нет версии MarkupSafe, которая была бы более современной с Jinja2 2.5.2.

Ваш тест также не использует кеш байт-кода Jinja2, что может значительно ускорить его. Я не уверен, есть ли у Django кеш шаблонов или нет - я знаю, что он имеет кеширование фрагментов, но я не уверен во всем этом.


Обновление: Я попробовал встроенный MemcachedBytecodeCache, и он замедлил Jinja2 с 2,6 до 22 мс, вероятно, потому, что на таком простом шаблоне сетевая активность хуже, чем его сборка. С кешем оперативной памяти это были те же самые 14 мс.

...