You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js内存中Zip文件留存时长咨询:函数结束后是否释放?

关于Node.js中内存解压Zip文件的资源释放问题

我是Node.js后端开发新手,最近在项目里选择把API接收的Zip文件在内存中解压处理,但现在担心这种方式是否节省资源,想请教资深开发者:存储在内存中的Zip文件实际会留存多久?是服务器运行全程还是函数执行结束后就释放?我用的是Zip工具adm-zip。

代码片段:

async 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;
}

解答:

  • 这些内存不会留存到服务器运行全程,Node.js的垃圾回收(GC)会自动处理,核心取决于变量的引用情况。
  • 你代码里的zipReportsFile、zipReportsFileBuffer、zipContent都是函数getJsonFiles的局部变量,函数执行结束后,如果没有外部代码引用它们,GC会在合适时机回收这些变量占用的内存。
  • 你返回的jsonFiles是zipContent.getEntries()的结果,这部分数据的内存释放由调用方决定:只要调用方还保留着jsonFiles的引用,内存就不会被释放;一旦调用方不再使用并解除引用,GC就会回收这部分内存。
  • 关于资源占用的评估:如果Zip文件体积不大,内存解压确实比磁盘解压更快、更简洁;但如果是大体积Zip(比如几百MB甚至GB级),内存解压会瞬间占用大量内存,可能触发内存溢出,这种场景建议改用磁盘临时文件解压的方式。
  • 额外提醒:adm-zip创建实例时会把整个Zip包的内容(包括解压后的条目)全部加载到内存,要是Zip里包含大量或大体积文件,内存占用会很明显,需要结合业务场景评估是否适用。

内容的提问来源于stack exchange,提问作者DWORD

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 12:03:14