2017-06-21 43 views

回答

3

在node.js中既Buffer和WebAssembly Memory对象具有属性bufferArrayBuffer类型本身被定义为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对象只是一个字节流的容器。为了访问和使用它,你必须将它打包/转换为Typed Array(例如Uint8Array,DataView等),node.js Buffer或WebAssembly Memory。

+0

tks为答案@ kanaka。我不知道下面都有一个ArrayBuffer。那么,使用WebAssembly Memory还是有意义的,或者直接使用ArrayBuffer over node.js Buffer? –

+0

这真的取决于你想要完成的事情。你可以非常有效地在类型数组之间进行复制(特别是如果你使用'set'方法),所以根据不同的目的使用不同的类型并根据需要进行转换/复制可能不是一个很大的性能问题,除非你正在做的是性能敏感的。 – kanaka

2

一个显着差异是WebAssembly.Memory可通过Memory.prototype.grow调整大小,而Buffer不可以。

另一个是WebAssembly.Memory的设计,使硬件内存保护可以用来消除动态范围检查,因此它的长度被钳位到64kb的倍数。 Buffer可以有任意的字节长度。