Module.exports大对象性能或开销



我正在为我的mongoose(MongoDB(模型创建助手
就性能和开销而言,我不知道我应该使用exports.findByIdmodule.exports

module.exports使代码更干净,但当我在另一个文件中导入助手时,我实际上一次导入了所有方法,而不是我真正需要的方法。

// user.helper.js
module.exports = {
/**
* Find user by id.
* @param _id string
* @returns Promise<User>
*/
findById: (_id) => {
return User.findById(_id).cache();
},
// many methods
};

这不太重要。如果导入文件,整个文件将执行一次,并将属性分配给文件的导出。然后,无论在哪里导入文件,该文件都不会再次运行——相反,导入文件现在将引用导出的module.exports。导出是包含单个函数还是包含多个函数的对象,都不会改变脚本运行所需的时间。

考虑到这类事情,唯一的改进就是引擎可以垃圾收集未使用的对象。例如,如果你有

// this is the entire contents of the file
function foo() {
console.log('foo');
}
module.exports = 'bar';

然后垃圾收集器可以自由地删除foo,因为它在任何地方都没有被引用,也没有在导出中被引用。相比之下:

module.exports = {
foo: () => console.log('foo'),
bar: 'bar'
}

上面的内容不会被垃圾收集,因为它现在是持久导出对象的一部分。

如果您有要在文件/模块之外使用的函数或对象,请将其放在module.exports上,否则请将其关闭module.exports。(尽管这两种方式都不太可能有好处(

最新更新