JavaScript Blob 对象何时被垃圾回收?

14
在现代浏览器中,可以将大型对象分配为 Blob,然后通过 URL 请求访问它。该 URL 将在浏览器的其他位置提供存储的对象(例如图像数据)。
浏览器如何知道不再需要此 URL,并且可以对应的Blob数据进行垃圾回收?

下面的答案实际上与垃圾回收无关,它只是释放磁盘空间。如果您对垃圾回收的细节感兴趣,可以参考以下链接:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Memory_Management - Maus
2
@Maus,感谢提供链接。在我看来,垃圾收集器负责清理不再需要的任何资源。此外,磁盘仍然是内存,并且通常用作RAM(虚拟内存)的扩展。浏览器/操作系统可以自由决定blob是存储在进程的工作集中还是存储在磁盘上。 - Drew Noakes
1个回答

14

浏览器最终将清除此资源,但可能需要一段时间(几小时或几天)才会从内存/磁盘中删除。

如果您希望明确删除该对象,可以通过revokeObjectURL来执行此操作。

var blob = new Blob([/*JPEG data*/], {type: "image/jpeg"}),
    url = (window.URL || window.webkitURL),
    objectUrl = url.createObjectURL(blob);

// use the object URL, eg:
var img = new Image();

img.onload = function()
{
    // release the object URL once the image has loaded
    url.revokeObjectURL(objectURL);
};

// trigger the image to load
image.src = objectURL;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接