Ich frage mich, ob es möglich ist, Node.js Buffer Speicherzuweisung mit WebAssembly Memory zu ersetzen?Was ist der Unterschied zwischen node.js Puffer und WebAssembly-Speicher?
Wenn ja, gibt es irgendwelche Vorteile?
Ich frage mich, ob es möglich ist, Node.js Buffer Speicherzuweisung mit WebAssembly Memory zu ersetzen?Was ist der Unterschied zwischen node.js Puffer und WebAssembly-Speicher?
Wenn ja, gibt es irgendwelche Vorteile?
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.
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? –
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
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.
Diese Frage ist wie die Frage, was der Unterschied zwischen dem Handschuhfach eines Volvo gegen die Motorhaube eines BMW ist. Sicher, beide enthalten Zeug. –