Nodejs需要:一次还是按需?

时间:2012-09-01 08:05:32

标签: node.js optimization

目前加载模型的最佳做法是什么(我认为是所有必需的文件)?

我正在考虑这两种方法来实现解决方案(无意义的代码如下所示):

var Post = require('../models/post');

function findById(id) {
    return new Post(id);
}

function party() {
    return Post.getParty();
}

VS

function findById(id) {
    return new require('../models/post')(id);
}

function party() {
    return require('../models/post').getParty();
}

这些片段中的一个是首选吗?是否有相当大的记忆和时间权衡?或者它只是一个不成熟的优化?

3 个答案:

答案 0 :(得分:7)

这是一个过早的优化(对require()的调用是缓存和幂等的),但我个人称你的第一个样式更好(在初始化期间加载依赖项而不是后续处理),因为它更容易让你了解什么你在做。在开始时加载所有内容会稍微减慢启动速度(这几乎不是问题),以换取大多数请求运行得更快(除非您已经确定瓶颈并进行了一些核心分析,否则您不必担心)。

答案 1 :(得分:5)

您应该在开始时使用require的单个调用来定义使用该版本。虽然模块加载的频率没有任何差别(但是只运行一次它们只加载一次),但第二种方式存在性能问题。

问题是require是Node.js中阻塞的少数几个函数之一。这意味着,只要它运行,Node.js就无法满足任何传入请求。在启动时,这没有问题:只需要一段时间,直到您的应用程序启动并运行。

但是,当您的应用程序已经运行一段时间时,您肯定不希望遇到阻塞时刻。

因此,如果您没有第二个选项的非常特殊原因,请选择第一个选项。

答案 2 :(得分:0)

我认为第二种情况对于避免循环模块依赖是有用的,因为require()在运行时而不是加载时发生。

否则,我相信第一个(稍微?)更快,对我来说,更具可读性。