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

时间:2009-08-24 19:28:00

标签: python django-templates template-engine mako jinja2

Jinja2和Mako显然都很快。

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

5 个答案:

答案 0 :(得分:99)

以下是用于呈现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

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

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

答案 1 :(得分:10)

jinja2 docs开始,如果你需要的话,似乎string.Template是最快的。

  

毫无疑问,你应该尝试   从模板中删除尽可能多的逻辑   可能。但模板没有任何   逻辑意味着你必须做所有的事情   处理代码很无聊   和愚蠢的。一个模板引擎   这是用Python和   叫做string.Template。没有   循环,如果条件和目前为止   你可以使用最快的模板引擎   得到Python。

答案 2 :(得分:3)

如果你可以在混合中抛出缓存(比如memcached),那么选择基于功能和易用性而不是优化。

我使用Mako因为我喜欢语法和功能。幸运的是,它也是最快的之一。

答案 3 :(得分:1)

一般情况下,您必须进行性能分析才能回答该问题,因为这取决于您使用模板的方式和用途。

string.Template是最快的,但是如此原始,它几乎不能像其他模板系统一样被称为模板,因为它只进行字符串替换,并且没有条件或循环,使得它在实践中毫无用处

答案 4 :(得分:-3)

我认为猎豹可能是最快的,因为它是用C实现的。