我在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代码中,因为它更容易维护。但我担心对性能的影响。
有什么想法?感谢。
答案 0 :(得分:5)
代码的可读性和可维护性的损失可能超过您将获得的任何性能提升。您可以找到many benchmarks的Python模板引擎。所有流行的模板引擎都可以接受。
如果你不喜欢django模板中的缺点,请使用更好的东西。我个人使用(强烈推荐)Mako我知道其他几个喜欢Jinja2的人。
答案 1 :(得分:2)
如果你对它进行基准测试,我相信你会发现某种差异,但我认为它根本不重要。每个用户的加载时间差异可能小于眨眼间。我认为没有人会注意到。
另一方面,在部署模板之前没有什么能阻止您编译模板,这样可以提供与运行时代码循环相同的性能。
在这种情况下,基本上做任何让你的生活更轻松的事情......在GAE上,你的时间会更好地用于数据建模,减少到数据存储区的数量等等。
答案 2 :(得分:1)
请考虑查看报告的基准here。
答案 3 :(得分:0)
我不这么认为。
我能看到唯一能够产生真正差异的是,如果一种方法可以将结果流式传输到浏览器,而不是先在内存中构建完整的页面。这可能会对大页面产生影响。我对Django不太熟悉,知道模板引擎是否流式传输部分结果。