Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在需要时进行对象分解是否会导致Node.js中出现内存泄漏?_Node.js_Memory Management_Memory Leaks_Node Modules - Fatal编程技术网

在需要时进行对象分解是否会导致Node.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

我正在构建一个内存非常昂贵的应用程序。我已经在多个文件中导入了如下所示的模块和常量。它会导致内存泄漏吗?。我的理解是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

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属性已更改。这就是我想展示的。