Node.js中变量在内存中停留的时间



我是nodejs后端的新手。最近在一个项目中,我选择将从API接收到的zip文件解压到内存中以使用它。但现在我想这是否节约资源。因此,我想问经验丰富的nodejs开发人员,存储在内存中的zip文件实际在内存中停留了多长时间?只要服务器在运行还是直到功能结束?

我使用了Zip Tool adm Zip。

代码段

function getJsonFiles () {
const zipReportsFile = await fetch(this.generateApiUrl({action:"get",project:project.name,compression:"zip",date:myDate}));

const zipReportsFileBuffer = Buffer.from(await zipReportsFile.arrayBuffer());

//reading zip archive in memory
const zipContent = new AdmZip(zipReportsFileBuffer);

const jsonFiles = zipContent.getEntries();
return jsonFiles;
}

感谢您的每一个回答。

变量在内存中的生存期取决于其作用域。并且数据在存储器中的寿命取决于在"存储器"中使用的对它的引用的数量;"活着";范围(意味着它还没有结束(。在变量、zip文件数据或其他任何内容中放入什么都无关紧要。

function getJsonFiles () {
const zipReportsFile = await fetch(this.generateApiUrl({action:"get",project:project.name,compression:"zip",date:myDate}));

zipReportsFile:这个变量有块作用域,所以它会在这个函数的末尾被丢弃,除非你在的其他地方引用它

const zipReportsFileBuffer = Buffer.from(await zipReportsFile.arrayBuffer());

zipReportsFileBuffer:此变量也将在函数末尾结束。第一个变量的引用用于promise闭包,当promise被解析时,内存将被释放。如果由于某种原因无法解决promise状态,则会出现内存泄漏,内存不会被释放,但在该函数结束后,您的变量zipReportsFile仍然无法访问

const zipContent = new AdmZip(zipReportsFileBuffer);

zipContent:这个变量也将在函数的末尾结束,同时引用它保存的zipReportsFileBuffer

const jsonFiles = zipContent.getEntries();
return jsonFiles;
}

jsonFiles:这是您返回的数据,因此生存期取决于您对数据的处理方式,也就是您调用函数的位置。另外要注意的是,如果getEntries()(我不知道它到底返回了什么(包含对zipContent的引用,然后可能还有对zipReportsFileBuffer的引用,那么您将返回所有这些引用,并且它们将通过返回的对象在内存中保持可访问性。

最新更新