6

我正在使用createObjectURL获取本地图像文件的参考 URL。当我完成文件/图像时,我会调用revokeObjectURL以释放该内存。一切对我来说都很好,但我只是想确保我正在释放我能释放的所有内存。

在我检查了chrome://blob-internals页面后,我的担忧出现了。在调用createObjectURL和使用图像时,我注意到创建了两个条目。一个有网址 blob:blobinternal:///d17c4eef-28e7-42bd-bafa-78d5cb86e761

和另外一个

blob:http://localhost/dbfe7b09-81b1-48a4-87cd-d579b96adaf8

两者都引用了相同的本地文件路径。在调用时,revokeObjectURL只有第二个条目被删除chrome://blob-internals。为什么会发生这种情况,如何摆脱其他条目以及两种类型之间的区别是什么?

此外,我还看到有人在使用图像之前撤销 URL 的例子。这有什么影响?

对该主题的一些见解将不胜感激!:)

编辑:我在jsfiddle创建了一个示例。所以首先打开blobinternals并删除任何现有的 blob。然后运行 ​​jsfiddle 示例,并在您的机器上选择一个图像文件。然后刷新 blobinternals 以查看它添加了什么。然后在我的示例中单击“撤销 URL”。最后刷新 blobinternals 以查看剩余的 blob。

4

1 回答 1

1

另一个引用(以 开头的那个blob:blobinternal)似乎由input type="file"元素持有。我修改了你的函数来重置输入的值,当我点击撤销 URL 按钮时,所有引用都被清除:

killBut.onclick = function () {
    URL.revokeObjectURL(ourURL);
    fileBut.value = '';
};

在 Chrome Canary 中测试。

于 2011-08-24T12:46:26.537 回答