2017-06-21 99 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可以有任意的字節長度。