2

目前加载模型的最佳做法是什么(我猜想适用于所有必需的文件)?

我正在考虑这两种方法来实现解决方案(废话代码说明如下):

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

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

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

对比

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

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

这些片段之一是首选吗?是否存在相当大的内存和时间权衡?还是只是过早的优化?

4

3 回答 3

7

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

于 2012-09-01T11:04:41.493 回答
5

您应该require在开始时使用带有单个调用的版本。虽然它对模块的加载频率没有任何影响(它们只加载一次,但是你这样做),第二种方式存在性能问题。

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

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

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

于 2012-09-02T12:48:33.493 回答
0

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

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

于 2015-11-24T17:31:20.347 回答