在需要时进行对象分解是否会导致Node.js中出现内存泄漏?
我正在构建一个内存非常昂贵的应用程序。我已经在多个文件中导入了如下所示的模块和常量。它会导致内存泄漏吗?。我的理解是require'module_name'是单例的,但如果我们将其与对象分解一起使用,则会为每个require创建新的变量。现在,如果在整个项目中使用下面的样式,那么它的变量声明太多了,对吗 user_controller.js const{createUser,updateUser}=require'user_manager';//从用户模块导入函数 const{APPLICATION:USER_LIMIT}=require'config';//从配置文件导入常量 user_manager.js 常量createUser={ //这里有一些代码 } 常数更新程序={ //这里有一些代码 } module.exports={ createUser, 更新程序 } config.js在需要时进行对象分解是否会导致Node.js中出现内存泄漏?,node.js,memory-management,memory-leaks,node-modules,Node.js,Memory Management,Memory Leaks,Node Modules,我正在构建一个内存非常昂贵的应用程序。我已经在多个文件中导入了如下所示的模块和常量。它会导致内存泄漏吗?。我的理解是require'module_name'是单例的,但如果我们将其与对象分解一起使用,则会为每个require创建新的变量。现在,如果在整个项目中使用下面的样式,那么它的变量声明太多了,对吗 user_controller.js const{createUser,updateUser}=require'user_manager';//从用户模块导入函数 const{APPLICATI
module.exports = {
APPLICATION: {
USER_LIMIT: 10,
// Many such constants.
}
}
物体破坏的小实验:
index.js
var{name,getName}=require./module1'
var module1=需要“./module1”
var module2=需要“/module2”;
log`local name Before:${name}`;
log`local name Before:${getName}`;
name=Alex;
log`local name After:${name}`;
log`local name After:${getName}`;
log`Module1 name After:${Module1.name}`;
log`Module1 name After:${Module1.getName}`;
log`Module2前面的名称:${Module2.name}`;
log`Module2前面的名称:${Module2.getName}`;
module2.name=Ajax;
log`Module2 name After:${Module2.name}`;
log`Module2 name After:${Module2.getName}`;
模块1.js
const Module1=require../require\u vs\u new/Module1;
module.exports={
姓名:Dheemanth,
getName:函数{
返回此.name;
}
}
module2.js
module.exports={
姓名:Dheemanth,
getName:函数{
返回此.name;
}
}
输出
不,它的行为正常: 在使用Alex重写之前,已解构的name变量具有Dheemanth值。 destructured getName变量是一个不引用任何内容的函数,因此返回值未定义。 您的module1测试行为正常,getName附加到它,因此这是定义的。 module2测试也会正常运行,您可以通过覆盖module.name来更改返回值。
您可能想了解一下这个关键字,它在javascript中有点特殊。嘿,是的,它的行为和预期的一样。我担心内存泄漏。如果您观察到module1未更改其name属性,但module2 name属性已更改。这就是我想展示的。