使用nodejs可以采取哪些步骤来改善表达式中的jade模板渲染性能

时间:2012-07-05 11:23:13

标签: performance node.js express pug

背景

jade语法很棒但是我想知道它是如何影响性能的。

所以我创建了一个单页应用程序,并使用apache bench来比较使用jade渲染页面与使用内存字符串的吞吐量。没有变数,所以这是纯粹的学术比较。

内存字符串使整个应用程序的本地速度提高了两倍以上,考虑到生产模式下的玉应该从内存缓存中渲染,这似乎很多。

我正在使用节点0.8和快速生产模式的2.5.11版本,并且视图缓存选项显式设置为true

apache bench结果: https://dl.dropbox.com/u/3737990/jade/jade.png https://dl.dropbox.com/u/3737990/jade/memory.png

3 个答案:

答案 0 :(得分:9)

正如Harry所说,将模板引擎的性能与发送字符串的性能进行比较是没有意义的,因为它们满足了两种不同的需求。这有点像比较两辆车的MPG,除了你刚刚进入空档的一辆车,让它滚下山坡。

相反,它对compare templating engines更有帮助,因为它们都是相同目的的手段(动态呈现HTML)。

在这里,我们看到Jade是最慢​​的模板语言。可能有很多因素可以解释为什么会出现这种情况,但核心问题是Jade wasn't designed for speed。如果您需要极高的性能,doT是专为提高速度而设计的。

答案 1 :(得分:5)

内存中的字符串是您可以做的绝对最快的事情,因此与它进行比较并不是很有意义。模板永远不会像字符串连接一样快。设置为生产模式是您可以在性能方面做得最重要的事情。

答案 2 :(得分:4)

(添加这些额外的信息,因为这似乎是寻找“快速玉石表现”时首批搜索引擎点击之一)

我对nodejs生产应用程序有同样的问题。问题是jade默认在开发模式上运行,这不是你想要的生产,因为这会一次又一次地重新编译所有模板,浪费cpu和内存。

解决方案是使用:NODE_ENV=production node app.js运行您的应用程序,这将阻止玉重新编译循环,并可能触发其他一些快速性能改进。

请注意,这不会使jade 更快,只会阻止它执行不必要的工作并杀死您的CPU。