我很想知道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在基准测试上不可靠。可能只是操作系统,或者可能是我正在运行一堆其他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
我的工作环境是OSX,但服务器都是Linuxy,所以这让我很满意。
答案 0 :(得分:3)
我无法重现您的结果。我使用了你的测试文件并用
生成了一个空白的Django项目django-admin.py startproject foo && cd foo
使用Tornado 2.1.1,每次迭代我得到一致的 45ms 。 使用Django 1.3.1,每次迭代我得到 480ms 。
对于Jinja2,我进行了4次测试。 2.5.2和2.6有和没有MarkupSafe:
2.5.2:
2.6:
有趣的是,MarkupSafe实际上显着减慢了2.5.2(虽然仍然只有5ms),但这可能是因为我没有与Jinja2 2.5.2同时代的MarkupSafe版本。
您的测试也不使用Jinja2字节码缓存,这可能会显着加快速度。我不确定Django是否有模板代码缓存 - 我知道它有片段缓存但我不确定整个事情。
更新:我尝试了内置的MemcachedBytecodeCache
,它将Jinja2的速度降低到了2到22毫秒,可能是因为在模板这么简单,网络活动比构建它更糟糕。使用进程内存缓存,它是相同的14ms。