javascript – Blob数据驻留在哪里?

在长期运行的Web应用程序中,我最终可能会处理由Blob表示的大量数据.其中一些使用XHR(缓存友好)获得,其他使用新Blob(…)创建.

>现在,如果我正确地完成了我的阅读,Blob可以通过磁盘或内存来支持吗?
>这是如何决定的? (浏览器是否遵循相同的规则?)
>有没有办法强迫或保证某些行为?

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

最佳答案 到目前为止我发现的Firefox源代码:(我还没有得到任何验证!)

Blob对象是nsDOMFile子类的实例.实现方面,Blob和文件之间没有什么区别.它们是nsDOMFileFile,nsDOMMemoryFile,nsDOMTemporaryFileBlob或nsDOMMultipartFile.

几乎所有使用nsDOMMemoryFile的地方都是:

>在HTMLCanvasElement#toBlob中.
>在Camera API中.
>在Media Recorder API中.
>在二进制类型为“blob”时的WebSockets中.
>当binaryType为’blob’时,在WebRTC数据通道中.

所有其他地方都使用nsDOMFileFile或nsDOMTemporaryFileBlob,因此由磁盘存储支持,但新的Blob构造函数除外.

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

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

点赞