我在客户端中创建了巨大的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
,但内存没有任何 react 。如何释放内存?
最佳答案
我想你会在这里碰壁。 Javascript是garbage-collected,这意味着您可以做的最好的事情就是“取消设置”变量,以在浏览器认为适当的时候有效地将其标记为垃圾回收。
看起来很吸引人,设置为null
不会立即释放分配的内存,而只会删除引用-只有在实际发生垃圾收集时(只有在不存在对所涉及对象的其他引用的情况下),才可能稍后释放内存。 :
var blobA = new Blob(...);
var blobB = blobA;
blobA = null;
console.log(blobB); // Blob, the object still exists
垃圾回收是自动的,无法通过Javascript来预测或检测垃圾回收的时间。但是,有一种方法可以手动触发它:
window.location.reload();
没错,对整个页面进行完全重新加载将触发垃圾回收,这实际上是AFAIK唯一的方法。在设计应用程序时,您可能需要考虑这一点。