为什么 `WebSocket.binaryType` 存在?

Why does `WebSocket.binaryType` exist?

WebSocket 有一个 .binaryType 属性 来确定接收到的数据是公开为 Blob 还是 ArrayBuffer。为什么? ArrayBuffer 允许您以同步方式处理数据,但是 Blob 有什么好处,为什么它是默认值?

一个 ArrayBuffer would have to be fully read before it could be used, and all of the data would have to be in memory at the same time. In contrast, a Blob can be read as a stream,避免了在对数据进行任何操作(或根本不进行任何操作)之前必须将所有数据都存储在内存中。

对于许多用途,您需要对流中的数据进行增量处理(例如播放音频或视频)。

出于某些目的,您确实需要所有数据才能对其进行任何操作,在这种情况下,您可能会使用 ArrayBuffer

至于为什么默认Blob,我推测是因为它更灵活。当你需要增量处理时,你可以通过Blob(使用流)获取它,而无需等待所有数据,如果你在开始之前需要所有数据,你总是可以得到一个ArrayBuffer来自 Blob 通过它的 arrayBuffer 方法。