我最终可能会在一个长时间运行的 Web 应用程序中处理大量数据,以 Blob 为代表。其中一些使用 XHR(缓存友好)获得,另一些使用new Blob(...)
.
- 现在,如果我的阅读正确,Blob 是由磁盘还是内存支持?
- 这是如何决定的?(浏览器是否遵循相同的规则?)
- 有没有办法强制或保证某些行为?
我最关心的是如何管理这些 blob。我最初的想法是只保留一个参考。但是,如果在应用程序的整个生命周期内将大量数据保留在内存中,那就太糟糕了。
我最终可能会在一个长时间运行的 Web 应用程序中处理大量数据,以 Blob 为代表。其中一些使用 XHR(缓存友好)获得,另一些使用new Blob(...)
.
我最关心的是如何管理这些 blob。我最初的想法是只保留一个参考。但是,如果在应用程序的整个生命周期内将大量数据保留在内存中,那就太糟糕了。
到目前为止,我在查看 Firefox 源代码时发现了什么:(我还没有得到任何验证!)
Blob 对象是子类的实例nsDOMFile
。在实现方面,Blob 和文件之间几乎没有区别。它们是nsDOMFileFile
,nsDOMMemoryFile
或.nsDOMTemporaryFileBlob
nsDOMMultipartFile
几乎唯一nsDOMMemoryFile
使用的地方是:
HTMLCanvasElement#toBlob
.binaryType
是'blob'
.binaryType
中是'blob'
.所有其他地方都使用nsDOMFileFile
or nsDOMTemporaryFileBlob
,因此由磁盘存储支持,构造函数除外new Blob
。
new Blob
使用构造函数创建的 Blob是nsDOMMultipartFile
. 这个类实际上包装了一组 blob(上面描述的其他三种),并将它们表示为一个。
当传递一个字符串或 ArrayBuffer 时,它们被复制到一个 newnsDOMMemoryFile
中,然后附加到集合中。当传递任何类型的现有 Blob 时,它会按原样附加到集合中。所以nsDOMMultipartFile
实际上可能有混合的磁盘和内存存储支持。