gpt4 book ai didi

javascript - 我总是需要显式调用 URL.revokeObjectURL() 吗?

转载 作者:搜寻专家 更新时间:2023-11-01 04:56:03 27 4
gpt4 key购买 nike

我正在使用 blob 下载文件,问题是我想在下载文件后保留对象 URL,而不对代码库进行重大更改。

所以选项之一是不调用 URL.revokeObjectURL();

依靠浏览器的垃圾收集器来避免任何内存泄漏是否安全?

我是否总是需要显式调用 URL.revokeObjectURL();

最佳答案

另一个答案是正确的,但我想为了完整起见我应该添加一些信息。

主要看你传给createObjectURL的是什么.

  • 如果您传递用户从 <input type=file> 中选择的文件,然后您创建的 blobURI 是指向用户磁盘上文件的直接指针,除了这个映射 URI-file_path 之外什么都保存在内存中。因此,在这种情况下,您可以创建大量此类内容而无需撤销它,没有真正的风险。

  • 如果您传递一个您生成的(或已获取的)Blob(或文件),则该 Blob 必须存储在内存中,并且 blobURI 确实会一直是指向该 Blob 的指针及其数据,保护它不受 GC 的影响,直到文档消失。在这种情况下,不要忘记在不再需要它时将其撤销。

  • 如果您传递来自用户设备的 MediaStream,不要,它已被弃用并且有充分的理由:至于生成的 Blob,UA 必须保持与外部设备在 blobURI 处于事件状态时打开,即使 MediaStream 已关闭,连接仍可能打开并导致无法请求新连接。

关于javascript - 我总是需要显式调用 URL.revokeObjectURL() 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49209756/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com