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

时间:2017-06-21 17:34:47

标签: javascript node.js webassembly

我想知道是否可以替换Node.js 使用WebAssembly进行Buffer内存分配Memory

如果是,有什么优势吗?

2 个答案:

答案 0 :(得分:4)

在node.js中,Buffer和WebAssembly Memory对象都有一个buffer属性,类型为ArrayBuffer,它本身被定义为Typed Arrays in ECMAScript/JavaScript 2015的一部分

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等),node.js缓冲区或WebAssembly内存。

答案 1 :(得分:3)

一个显着差异是,WebAssembly.Memory可通过Memory.prototype.grow进行调整,而Buffer则不会。{/ p>

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