什么是最快的Python模板系统?

Jos*_*son 52 python template-engine mako django-templates jinja2

Jinja2和Mako显然都非常快.

这些比较如何(功能较少但可能对我正在做的事情足够好)string.Template?

Ant*_*sma 100

以下是用于呈现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
Run Code Online (Sandbox Code Playgroud)

该基准测试基于Spitfire性能测试的代码,其中包含一些添加的模板引擎和添加的迭代以提高准确性.最后的列表和生成器concat是手工编写的Python,通过编译Python字节码来了解可实现的性能上限.优化版本在内部循环中使用字符串插值.

但在您用完切换模板引擎之前,请确保它很重要.在编译模板引擎之间的差异开始变得重要之前,您需要做一些非常繁重的缓存并真正优化代码.对于大多数应用程序而言,良好的抽象设施,与设计工具的兼容性,熟悉度和其他重要性更重要.

  • 当然,这种比较高度依赖于你正在做的事情.如果你渲染了很多小模板而不是一个庞大的桌子怎么办?然后,模板引擎的完全不同的性能特征将变得相关,例如模板解析和加载时间.道德?根据您自己的代码基准做出优化决策. (23认同)
  • 我不知道Django模板是那个sloow. (6认同)
  • 是的,天神每次渲染都有3ms的加载时间,在我的情况下,一个有线程评论的论坛猎豹需要0.4毫秒才能发表评论,而天神则需要3毫秒,50分时评论天神和猎豹在5毫秒见面.在5000的时候,天津是40毫秒,猎豹是在250毫秒. (3认同)
  • 我也没有。对于大多数人来说,这只是方程式的一小部分,但如果您要渲染 10x1000 的数据表,那么您就会遇到麻烦。 (2认同)

Jos*_*son 10

jinja2文档来看,似乎string.Template是最快的,如果这就是你所需要的.

毫无疑问,您应该尝试从模板中删除尽可能多的逻辑.但是没有任何逻辑的模板意味着你必须在代码中进行无聊和愚蠢的所有处理.这样做的模板引擎随Python一起提供,名为string.Template.没有循环,如果条件是迄今为止最快的模板引擎,你可以获得Python.