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

Posted

技术标签:

【中文标题】速度比较:服务器生成的 HTML 与模板?【英文标题】:Speed comparison: server-generated HTML vs templates? 【发布时间】:2011-06-21 03:30:36 【问题描述】:

我在 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 代码中,因为它更容易维护。但我担心会影响性能。

有什么想法吗?谢谢。

【问题讨论】:

【参考方案1】:

我不这么认为。

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

【讨论】:

甜蜜。谢谢——这令人鼓舞。 您无法在 App Engine 上流式传输数据。在处理程序返回之前不会发送响应。【参考方案2】:

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

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

在这种情况下,基本上做任何让您的生活更轻松的事情...在 GAE 上,您的时间将更好地用于对数据进行建模,减少访问数据存储的次数等。

【讨论】:

谢谢。我最终会进行基准测试。现在,我正试图从正确的道路上开始。我不太担心页面加载速度,而是担心 CPU 周期等。 然后你可以尝试编译模板——它们应该使用相同数量(甚至可能更少)的 CPU 周期,然后手动进行。【参考方案3】:

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

如果您不喜欢 django 模板的缺点,请使用更好的。我个人使用(并强烈推荐)Mako,我认识其他几个喜欢Jinja2 的人。

【讨论】:

这是正确答案。直接生成 HTML 而不是使用模板是最糟糕的过早优化。【参考方案4】:

考虑查看here 报告的基准。

【讨论】:

与其只发一个链接,不如总结一下内容。这样读者就不必点击了,当链接失效时,信息也不会丢失。

以上是关于速度比较:服务器生成的 HTML 与模板?的主要内容,如果未能解决你的问题,请参考以下文章

SpringBoot2 整合FreeMarker模板,完成页面静态化处理

python 列表生成式和生成器的速度性能比较

转国内用户如何加快App Store的访问速度

EJS模板引擎

EJS模板引擎

快速上手短信服务 —— 榛子云短信接口