为什么这个Jinja2模板渲染速度不比Djangos快?

Pet*_*son 6 django tornado jinja2

我很想知道Jinja2(2.6)比Django(1.3.1)模板引擎的速度快多少.

运行它我得到:

Django: 275.729 ms per iteration
Jinja2: 281.190 ms per iteration
Run Code Online (Sandbox Code Playgroud)

(越小越好)

这是Django基准:http://hastebin.com/DyGcxEybYd.py

这是Jinja2的基准:http://hastebin.com/uorDENWrkM.py

作为参考,相同的Tornado模板测试设法做到28.127 ms per iteration这一点大约快10倍,这几乎太好了.

相同的龙卷风基准:http://hastebin.com/F9PcqGb2sZ.py

UPDATE

不幸的是,解释是OSX在基准测试上不可靠.可能只是操作系统,或者可能是我正在运行一堆其他GUI应用程序,例如具有太多选项卡的浏览器.在极低负载下在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
Run Code Online (Sandbox Code Playgroud)

我的工作环境是OSX,但服务器都是Linuxy,所以这让我很满意.

Jam*_*col 3

我无法重现你的结果。我使用了你的测试文件并生成了一个空白的 Django 项目

django-admin.py startproject foo && cd foo
Run Code Online (Sandbox Code Playgroud)

使用 Tornado 2.1.1,每次迭代我得到一致的45 毫秒。使用 Django 1.3.1,我得到480 毫秒使用 Django 1.3.1,每次迭代

对于 Jinja2,我进行了 4 次测试。2.5.2 和 2.6 带和不带MarkupSafe

2.5.2:

  • 带标记安全: 19ms
  • 不带:14ms

2.6:

  • 带: 14ms
  • 不带:15ms

对我来说有趣的是,MarkupSafe 实际上显着地减慢了 2.5.2 的速度(尽管仍然只有 5 毫秒),尽管这可能是因为我没有与 Jinja2 2.5.2 同时代的 MarkupSafe 版本。

您的测试也不使用 Jinja2 字节码缓存,这可能会显着加快速度。我不确定 Django 是否有模板代码缓存——我知道它有片段缓存,但我不确定整个事情。


更新:我尝试了内置功能MemcachedBytecodeCache,它使 Jinja2 2.6 的速度减慢至 22 毫秒,可能是因为在如此简单的模板上,网络活动比构建它更糟糕。使用进程内内存缓存时,时间也是相同的 14 毫秒。