4

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

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

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

4

1 回答 1

3

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

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

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

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

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

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

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

于 2013-07-25T19:18:15.287 回答