删除javascript中的大Blob

Deleting big blobs in javascript

本文关键字:Blob javascript 删除      更新时间:2023-09-26

我在客户端创建了巨大的Blob,用户可以将其作为文件下载。

以下示例只是为了演示问题

var x= "sdfslkdfjklsdjiflskdflsdf" ; for(var i = 0; i<19;i++) x=x+x
var blob = new Blob([x,x,x,x,x,x,x,x,x,x,x,x,x], {
    type : "text/plain"
});

这将占用大量内存。当我完成blob时,我想释放内存。(我正在IE11 Edge中测试)

运行此脚本两次将失败,因为无法分配更多内存

我已经尝试过设置blob = null或使用delete blob,内存不会发生任何变化。

如何释放内存?

我想你会在这里碰壁的。Javascript是垃圾收集的,这意味着你能做的最好的事情就是"取消设置"变量,以有效地标记它们进行垃圾收集,当浏览器认为是时候了。

尽管看起来很有魅力,但设置为null不会立即释放分配的内存,而只是删除一个引用——只有在垃圾回收实际发生时才可能释放内存(假设不存在对相关对象的其他引用):

var blobA = new Blob(...);
var blobB = blobA;
blobA = null;
console.log(blobB); // Blob, the object still exists

垃圾回收是自动的,并且在Javascript中没有方法来预测或检测何时发生垃圾回收。然而,有一种方法可以手动触发它:

window.location.reload();

这是正确的,对整个页面进行完全重新加载将触发垃圾收集,这实际上是实现AFAIK的唯一方法。在设计应用程序时,您可能需要考虑这一点。