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

4 投票
4 回答
808 浏览
提问于 2025-04-16 11:12

我在使用Google App Engine的Django模板,编程语言是Python。

在模板里放循环和在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 个回答

1

可以看看这里报告的性能测试结果 链接

2

如果你去测试一下,我相信你会发现一些差别,但我觉得这些差别根本不重要。每个用户的加载时间差异可能连眨眼的时间都不到,我想没有人会注意到。

另一方面,没什么能阻止你在发布之前就把模板编译好,这样运行时的性能基本上和在代码中循环时是差不多的。

总之,在这种情况下,做任何能让你生活更轻松的事情就好……在GAE上,你更应该花时间好好设计你的数据,减少访问数据存储的次数等等。

5

你的代码可读性和可维护性下降,可能比你得到的性能提升要严重得多。你可以找到很多关于Python模板引擎的性能比较,还有一些基准测试。所有流行的模板引擎在性能上都表现得不错。

如果你觉得Django模板有缺点,那就换个更好的。个人来说,我使用(并且强烈推荐)Mako,还有很多人喜欢用Jinja2

撰写回答