我在客户端创建了巨大的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
,内存没有任何变化。
如何释放记忆?
答案 0 :(得分:1)
我想你会在这里碰到一堵墙。 Javascript是garbage-collected,这意味着您可以做的最好的事情是&#34;未设置&#34;变量有效标记它们用于垃圾收集,当浏览器认为它是时候。
看起来很迷人,设置为null
不会立即释放分配的内存,而只是删除引用 - 只有在垃圾收集实际发生时才可能释放内存(假设没有其他内容)存在对所涉及对象的引用):
var blobA = new Blob(...);
var blobB = blobA;
blobA = null;
console.log(blobB); // Blob, the object still exists
垃圾收集是自动的,并且有没有方式来预测或检测Javascript内部何时发生。但是有一种方法可以手动触发它:
window.location.reload();
这是正确的,对整个页面进行完全重新加载将触发垃圾收集,这实际上是完成AFAIK的唯一方法。在设计应用程序时,您可能需要考虑这一点。