15

背景

玉语法很棒,但我想看看它是如何影响性能的。

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

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

我在生产模式下使用节点 0.8 和 express 的 2.5.11 版本,视图缓存选项显式设置为true.

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

4

3 回答 3

9

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

相反,比较模板引擎更有帮助,因为它们都是达到相同目的的手段(动态呈现的 HTML)。

在这里,我们看到 Jade 是最慢的模板语言。造成这种情况的原因可能有很多因素,但核心问题是 Jade不是为速度而设计的。如果您需要极高的性能,doT专为速度而设计。

于 2012-07-15T22:47:40.533 回答
5

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

于 2012-07-13T23:09:21.667 回答
4

(添加这个额外的信息,因为这似乎是在寻找“快递玉性能”时的第一个搜索引擎点击之一)

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

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

请注意,这并不能让翡翠更快,它只是防止它做不必要的工作并杀死你的 CPU。

于 2015-07-19T14:52:35.417 回答