速度比较:服务器生成的HTML与模板?

时间:2011-02-04 04:39:54

标签: python django google-app-engine

我在Python中使用Google App Engine的Django模板版本。

在模板中放置循环与将它放在python页面处理程序之间是否有重大的性能差异?

例如,我正在比较这样的事情:

{% for i in items %}
   <div id="item_{{i.key}}">    
       {{i.text}}
   </div>
{% endfor %}

在我的python代码中输入类似的内容:

def returnHtml(items):
  item_array = []
  for i in items:
     item_array.append("<div id='item_%s'>%s</div>" % (i.id, i.text)
  return "".join(item_array)

...然后直接插入到标签中的django模板中:

{{ item_html }}

这是一个简单的例子,实际上,我在循环内部有更复杂的循环等。我喜欢将逻辑放在python代码中,因为它更容易维护。但我担心对性能的影响。

有什么想法?感谢。

4 个答案:

答案 0 :(得分:5)

代码的可读性和可维护性的损失可能超过您将获得的任何性能提升。您可以找到many benchmarks的Python模板引擎。所有流行的模板引擎都可以接受。

如果你不喜欢django模板中的缺点,请使用更好的东西。我个人使用(强烈推荐)Mako我知道其他几个喜欢Jinja2的人。

答案 1 :(得分:2)

如果你对它进行基准测试,我相信你会发现某种差异,但我认为它根本不重要。每个用户的加载时间差异可能小于眨眼间。我认为没有人会注意到。

另一方面,在部署模板之前没有什么能阻止您编译模板,这样可以提供与运行时代码循环相同的性能。

在这种情况下,基本上做任何让你的生活更轻松的事情......在GAE上,你的时间会更好地用于数据建模,减少到数据存储区的数量等等。

答案 2 :(得分:1)

请考虑查看报告的基准here

答案 3 :(得分:0)

我不这么认为。

我能看到唯一能够产生真正差异的是,如果一种方法可以将结果流式传输到浏览器,而不是先在内存中构建完整的页面。这可能会对大页面产生影响。我对Django不太熟悉,知道模板引擎是否流式传输部分结果。