javascript - 了解客户端文件的对象 URL 以及如何释放内存

标签 javascript image html fileapi

我正在使用 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/

相关文章:

html - 为什么 Facebook 的 Open Graph 协议(protocol)需要一个 fb :admins or fb:app_id . 。这个属性的重要性是什么?

javascript - jQuery - 添加/替换事件监听器(当事件处理程序未知时)

javascript - MongoDB 将字段和切片投影限制在一起

javascript - 使用 Ionic 和 AngularJS 在 $scope 中更改变量值时, View 中的变量值未更新

html - CSS 代码 : Background image not working

java - 将相机预览与图像合并?

java - 在设置为 ImageView 之前在哪里调用 Crop Image

Javascript检查对象数组中是否存在字符串

html - 在移动 View 中选择下拉菜单

html - 如何强制浏览器在可能的情况下中断文本?