53

Jinja2 和 Mako 显然都非常快。

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

4

5 回答 5

103

以下是用于渲染 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

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

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

于 2009-08-25T05:28:48.647 回答
9

jinja2 docs看来,如果这就是您所需要的,那么 string.Template 似乎是最快的。

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

于 2009-08-24T19:30:46.800 回答
3

如果您可以混合使用缓存(如 memcached),那么根据功能和易用性而不是优化来选择。

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

于 2009-11-09T00:16:00.687 回答
1

通常,您必须进行分析才能回答该问题,因为这取决于您使用模板的方式和用途。

string.Template 是最快的,但是太原始了,它几乎不能和其他模板系统一样被称为模板,因为它只做字符串替换,没有条件或循环,在实践中几乎没有用处。

于 2009-08-24T20:19:22.973 回答
-4

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

于 2009-08-25T00:29:17.057 回答