Blob 数据驻留在哪里?

Sté*_*hen 5 html javascript blob html5-filesystem

我最终可能会在长时间运行的 Web 应用程序中处理以 Blob 为代表的大量数据。其中一些使用 XHR(缓存友好)获得,其他使用new Blob(...).

  • 现在,如果我的阅读正确的话,Blob 是由磁盘还是内存支持的?
  • 这是如何决定的?(浏览器遵循相同的规则吗?)
  • 有没有办法强制或保证某些行为?

我主要关心的是如何管理这些斑点。我最初的想法是保留一些参考资料。但如果在应用程序的整个生命周期中将大量数据保留在内存中,那就很糟糕了。

Sté*_*hen 4

到目前为止,我在查看 Firefox 源代码时发现了什么:(我还没有得到任何验证!

Blob 对象是nsDOMFile子类的实例。在实现方面,Blob 和文件之间几乎没有区别。它们是nsDOMFileFilensDOMMemoryFilensDOMTemporaryFileBlobnsDOMMultipartFile

几乎唯一nsDOMMemoryFile使用的地方是:

  • HTMLCanvasElement#toBlob
  • 在相机 API 中。
  • 在媒体记录器 API 中。
  • 在 WebSockets 中,binaryType'blob'.
  • 在 WebRTC 数据通道中,当binaryType是时'blob'

所有其他地方都使用nsDOMFileFileor nsDOMTemporaryFileBlob,因此由磁盘存储支持,构造函数除外new Blob

使用构造函数创建的 Blobnew Blob是 的实例nsDOMMultipartFile。该类实际上包装了一组 blob(上述其他三种类型),并将它们表示为一个。

当传递字符串或 ArrayBuffer 时,它们被复制到新的中nsDOMMemoryFile,然后附加到集合中。当传递任何类型的现有 Blob 时,它会按原样附加到集合中。因此,nsDOMMultipartFile实际上可能具有混合磁盘和内存存储支持。