目前加载模型的最佳做法是什么(我认为是所有必需的文件)?
我正在考虑这两种方法来实现解决方案(无意义的代码如下所示):
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();
}
这些片段中的一个是首选吗?是否有相当大的记忆和时间权衡?或者它只是一个不成熟的优化?
答案 0 :(得分:7)
这是一个过早的优化(对require()
的调用是缓存和幂等的),但我个人称你的第一个样式更好(在初始化期间加载依赖项而不是后续处理),因为它更容易让你了解什么你在做。在开始时加载所有内容会稍微减慢启动速度(这几乎不是问题),以换取大多数请求运行得更快(除非您已经确定瓶颈并进行了一些核心分析,否则您不必担心)。
答案 1 :(得分:5)
您应该在开始时使用require
的单个调用来定义使用该版本。虽然模块加载的频率没有任何差别(但是只运行一次它们只加载一次),但第二种方式存在性能问题。
问题是require
是Node.js中阻塞的少数几个函数之一。这意味着,只要它运行,Node.js就无法满足任何传入请求。在启动时,这没有问题:只需要一段时间,直到您的应用程序启动并运行。
但是,当您的应用程序已经运行一段时间时,您肯定不希望遇到阻塞时刻。
因此,如果您没有第二个选项的非常特殊原因,请选择第一个选项。
答案 2 :(得分:0)
我认为第二种情况对于避免循环模块依赖是有用的,因为require()在运行时而不是加载时发生。
否则,我相信第一个(稍微?)更快,对我来说,更具可读性。