2017-06-21 5 views

Antwort

3

In node.js beide Buffer und Webassembly Memory Objekte haben eine Eigenschaft, die buffer vom Typ ArrayBuffer die sich als Teil der Typed Arrays in ECMAScript/JavaScript 2015 definiert ist.

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 } 

Ein einfaches Arraybuffer-Objekt ist nur ein Behälter für einen Strom von Bytes. Um darauf zuzugreifen und es zu verwenden, müssen Sie es in ein typisiertes Array (z. B. Uint8Array, DataView usw.), einen Knoten.js-Puffer oder einen WebAssembly-Speicher umwandeln.

+0

Tks für die Antwort @kanaka. Ich wusste nicht, dass beide einen ArrayBuffer darunter haben. macht es Sinn, WebAssembly Memory zu verwenden oder ArrayBuffer direkt über node.js Buffer zu verwenden? –

+0

Es hängt wirklich davon ab, was Sie erreichen möchten. Sie können ziemlich effizient zwischen typisierten Arrays kopieren (besonders, wenn Sie die set-Methode verwenden), daher ist es wahrscheinlich kein großes Leistungsproblem, verschiedene Typen für verschiedene Zwecke zu verwenden und zu konvertieren/zu kopieren, wenn Sie _really_ performance sensitive machen. – kanaka

2

Ein signifikanter Unterschied ist, dass WebAssembly.Memory über Memory.prototype.grow in der Größe veränderbar ist, während Buffer nicht ist.

Eine andere ist, dass WebAssembly.Memory ist so konzipiert, dass Hardware-Speicherschutz verwendet werden kann, um dynamische Grenzen Schecks zu entfernen und damit seine Länge ist auf ein Vielfaches von 64kb geklemmt. Buffer kann eine beliebige Bytelänge haben.

Verwandte Themen