node.js Buffer 和 WebAssembly Memory 有什么区别?



我想知道是否可以替换节点.js 使用 WebAssembly Memory 分配缓冲区内存?

如果是,有什么优势吗?

在node中.jsBuffer和WebAssemblyMemory对象都有一个buffer属性,该属性的类型为ArrayBuffer,该属性本身被定义为ECMAScript/JavaScript 2015中Typed Arrays的一部分。

node --version
v8.1.2
node
> mem = new WebAssembly.Memory({initial: 10});
Memory {}
> buf = new Buffer("abc")
<Buffer 61 62 63>
> mem.buffer
ArrayBuffer { byteLength: 655360 }
> buf.buffer
ArrayBuffer { byteLength: 8192 }

纯 ArrayBuffer 对象只是字节流的容器。为了访问和使用它,您必须将其包装/转换为类型数组(例如Uint8Array,DataView等),节点.js缓冲区或WebAssembly内存。

一个显着的区别是WebAssembly.Memory可以通过Memory.prototype.grow调整大小,而Buffer则不能。

另一个是WebAssembly.Memory的设计使得硬件内存保护可用于删除动态边界检查,因此其长度被钳制为64kb的倍数。Buffer可以具有任意字节长度。