Node.js 使用节点的最佳实践:传递引用还是使用需要导入?

Node.js 使用节点的最佳实践:传递引用还是使用需要导入?,node.js,performance,Node.js,Performance,我是Node.js新手,有人能解释一下下面两种方法的优缺点吗?应该使用哪一种 在app.js中: var foo = require("./foo"); var foo2 = require("./foo2"); foo.dostuff(); foo2.dostuff(); var needImport = require("./bar"); var foo = new require("./foo")(needImport); var foo2 = new require("./foo2")

我是Node.js新手,有人能解释一下下面两种方法的优缺点吗?应该使用哪一种

在app.js中:

var foo = require("./foo");
var foo2 = require("./foo2");
foo.dostuff();
foo2.dostuff();
var needImport = require("./bar");
var foo = new require("./foo")(needImport);
var foo2 = new require("./foo2")(needImport);
foo.dostuff();
foo2.dostuff();
foo.js和foo2.js:

var needImport = require("./bar");
foo.prototype.dostuff = function()

在app.js中:

var foo = require("./foo");
var foo2 = require("./foo2");
foo.dostuff();
foo2.dostuff();
var needImport = require("./bar");
var foo = new require("./foo")(needImport);
var foo2 = new require("./foo2")(needImport);
foo.dostuff();
foo2.dostuff();
foo.js和foo2.js:

var needImport;
function foo(needImportPassed) {
needImport = needImportPassed
}
foo.prototype.dostuff = function()

这个问题基本上是问,传递bar模块的引用是否有好处?或者每次都让其他文件请求特定的模块?(bar.js不是一个持久性连接,只是一堆帮助函数,所以bar.js的读取量是第二种方法的两倍吗?

我不明白为什么要修改foo原型。您有两种解决方案:

在app.js中

var foo = require('./foo');
var foo2 = require('./foo2');
foo.doStuff();
foo2.doStuff();
在foo2.js和foo.js中

var bar = require('./bar');
module.exports = {
  doStuff : () => bar.doOtherStuff()
};

在app.js中

var bar = require('./bar');
var foo = require('./foo')(bar);
var foo2 = require('./foo2')(bar);
foo.doStuff();
foo2.doStuff();
在foo.js和foo2.js中

module.exports = (bar) => ({
  doStuff : () => bar.doOtherStuff()
});

您应该使用第一种解决方案,因为它是一种更常见的模式,并且允许创建真正的模块化代码。在
app.js
中,您不需要知道foo或foo2需要哪个模块

require
使用缓存,因此即使您需要几个模块,您的模块也只被解析和执行一次times@MatthieuLemoine谢谢你的回答,我刚刚用一个更好的例子更新了这个问题,你能确认上面的性能是一样的吗?我有foo1,foo2……foo100,每个都需要模块bar.js,我知道第一种方法使代码更容易理解,但就性能而言,有缺点吗?