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