【问题标题】:What steps can be taken to improve jade template rendering performance in express using nodejs使用nodejs在express中可以采取哪些措施来提高jade模板渲染性能
【发布时间】:2012-07-05 19:07:28
【问题描述】:

背景

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

所以我创建了一个单页应用程序并使用 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

【问题讨论】:

    标签: performance node.js express pug


    【解决方案1】:

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

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

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

    【讨论】:

    • 该演示中的翡翠尚未设置为“生产模式”。比较毫无价值。
    • 我不完全确定,因为我现在没有基准测试,但 Jade 是该列表中第二或第三快的。当然,没有什么比 doT 更好的了,因为它本质上只是一个字符串连接。
    • 生产模式不是只适用于快递翡翠吗?该演示使用的是原始翡翠实现
    • 该演示包括 Jade 模板的编译。我发现设置它很简单,所以玉模板在保存时(在开发期间)编译成原生 JS 函数,这意味着客户端脚本快如闪电。
    【解决方案2】:

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

    【讨论】:

    • 我想知道为什么它没有像我喜欢的那么快,然后我意识到我没有将我的 NODE_ENV 存储在 .bash_profile 中。在 Jade 模板和许多其他 Expressy 上设置 export NODE_ENV=production 所获得的性能提升真是太疯狂了。
    【解决方案3】:

    (添加这个额外的信息,因为这似乎是在寻找“表达翡翠性能”时最先出现的搜索引擎之一)

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

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

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

    【讨论】:

    • 这实际上有很大的不同。它在生产模式下运行得更快。
    • 有没有办法设置“生产”模式,但在我的暂存环境中有 NODE_ENV = test.还有办法覆盖生产设置吗?
    猜你喜欢
    • 1970-01-01
    • 2012-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-21
    • 2014-05-11
    • 2012-01-15
    相关资源
    最近更新 更多