Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 了解客户端文件的对象URL以及如何释放内存_Javascript_Image_Html_Fileapi - Fatal编程技术网

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

Javascript 了解客户端文件的对象URL以及如何释放内存,javascript,image,html,fileapi,Javascript,Image,Html,Fileapi,我正在使用createObjectURL获取本地图像文件的参考URL。当我处理完文件/图像后,我调用revokeObjectURL来释放内存。对我来说一切都很好,但我只是想确定我正在释放我能释放的所有记忆 我检查了chrome://blob-internals第页。调用createObjectURL并使用该图像时,我注意到创建了两个条目。一个带有url blob:blobinternal:///d17c4eef-28e7-42bd-bafa-78d5cb86e761 另一个呢 blob:http

我正在使用
createObjectURL
获取本地图像文件的参考URL。当我处理完文件/图像后,我调用
revokeObjectURL
来释放内存。对我来说一切都很好,但我只是想确定我正在释放我能释放的所有记忆

我检查了
chrome://blob-internals
第页。调用
createObjectURL
并使用该图像时,我注意到创建了两个条目。一个带有url
blob:blobinternal:///d17c4eef-28e7-42bd-bafa-78d5cb86e761

另一个呢

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

但两者都引用了相同的本地文件路径。调用
revokeObjectURL
时,仅从
chrome://blob-internals
。为什么会出现这种情况,如何去掉另一个条目,这两种类型之间的区别是什么

此外,我还看到一些人甚至在使用图片之前就撤销了URL的例子。这有什么影响

如能深入了解本主题,将不胜感激!:)

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

另一个引用(以
blob:blobinternal开始的引用)似乎由
input type=“file”
元素持有。我修改了您的函数以重置输入值,当我单击revoke URL按钮时,所有引用都被清除:

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

在Chrome Canary中测试。

您使用的Chrome版本是什么?我没有在Chrome15Dev频道上看到这一点(只创建了一个blobURL),但记得以前见过这一点。您是否有一个小的测试页面,可以重新生成两个URL?根据我的经验,
chrome://blob-internals
有时需要几秒钟来反映
revokeObjectURL
调用。我已经编辑了我的帖子,其中包含了一个JSFIDLE示例。我正在运行chrome 14beta。这似乎也适用于我。好主意,谢谢!一个问题:IE中的文件输入元素不是只读的吗?如果是这样,如何清除它?将它放入
表单
元素中并调用
reset()
来清除它。下面是一个例子:在chrome canary中,
chrome:\\blob internal
的表示方式要好得多。您可以看到唯一生成的blob以及它们被引用的频率。例如,您有一个带有href reference的链接和一个指向同一blob=>的对象,该blob的refcount为2。