我正在使用 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。
最佳答案
另一个引用(以 blob:blobinternal
开头的引用)似乎由 input type="file"
元素保存。我修改了你的函数来重置输入的值,当我点击撤销 URL 按钮时,所有引用都被清除:
killBut.onclick = function () {
URL.revokeObjectURL(ourURL);
fileBut.value = '';
};
在 Chrome Canary 中测试。
关于javascript - 了解客户端文件的对象 URL 以及如何释放内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7167180/