【发布时间】:2017-11-24 17:56:18
【问题描述】:
【问题讨论】:
-
这个问题就像问沃尔沃的手套箱和宝马的引擎盖有什么区别。当然,两者都包含东西。
标签: javascript node.js webassembly
【问题讨论】:
标签: javascript node.js webassembly
在 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 内存。
【讨论】:
set 方法),因此为不同目的使用不同类型并根据需要进行转换/复制可能不是一个大的性能问题,除非您正在做的是真的 性能敏感。
一个显着的区别是WebAssembly.Memory 可以通过Memory.prototype.grow 调整大小,而Buffer 不能。
另一个是WebAssembly.Memory 被设计为可以使用硬件内存保护来删除动态边界检查,因此它的长度被限制为 64kb 的倍数。 Buffer 可以有任意字节长度。
【讨论】: