Node.js 节点要求:一次还是按需?

Node.js 节点要求:一次还是按需?,node.js,optimization,Node.js,Optimization,目前加载模型的最佳实践是什么(我想所有必需的文件都适用) 我在考虑以下两种实现解决方案的方法(下面是无意义的代码): vs 是否首选这些代码片段之一?是否有相当大的内存和时间权衡?或者这只是一个过早的优化?这是一个过早的优化(对require()的调用被缓存且是幂等的),但我个人认为您的第一种风格更好(在初始化期间加载依赖项而不是后续处理),因为它更容易让您了解您正在做的事情。在启动时加载所有内容将略微降低启动速度(这几乎不成问题),从而使大多数请求的运行速度稍微加快(除非您已经确定了瓶颈并进行

目前加载模型的最佳实践是什么(我想所有必需的文件都适用)

我在考虑以下两种实现解决方案的方法(下面是无意义的代码):

vs


是否首选这些代码片段之一?是否有相当大的内存和时间权衡?或者这只是一个过早的优化?

这是一个过早的优化(对
require()
的调用被缓存且是幂等的),但我个人认为您的第一种风格更好(在初始化期间加载依赖项而不是后续处理),因为它更容易让您了解您正在做的事情。在启动时加载所有内容将略微降低启动速度(这几乎不成问题),从而使大多数请求的运行速度稍微加快(除非您已经确定了瓶颈并进行了一些硬核分析,否则您不必担心这一点).

您应该明确地使用版本,并在开始时调用
require
。尽管模块的加载频率没有任何区别(无论您如何操作,它们只加载一次),但第二种方法存在性能问题

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

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


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

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


否则,我认为第一种方法(稍微?)更快,对我来说,可读性更高。

此外,在启动和启动时具备所有要求,使得最终将代码移植到不同的模块系统(如AMD)更容易。
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();
}