在 javascript 中导入 webassembly 模块的正确方法是什么
What is the proper way to import webassembly module in javascript
在webassembly.org,JS API页面,javascript中引入WebAssembly的方式是
fetch('example.wasm').then(response => response.arrayBuffer())
.then(bytes => instantiate(bytes, importObject))
.then(instance => instance.exports.e());
emcc 发出的 js 文件似乎就是这样做的。
但是当我为 Rust 的 Cargo 使用 wasm-pack 时,javascript 文件只是 import * as wasm from './example.wasm'
这两者有什么区别?直接导入是新支持的功能吗?当使用直接导入时,我如何从 javascript 访问 WebAssembly 的内存,因为我没有像使用第一种方法那样将它们传递给 WebAssembly 模块?
WebAssembly 模块的声明式导入尚未标准化。我假设 wasm-pack 的目标是 Node.js 的实验性导入功能:https://www.joyent.com/blog/improved-wasm-support-coming-to-node#importing-webassembly-modules
如何访问内存取决于模块:如果它导出它,您可以作为成员访问它,如果它导入它,它必须作为 ES6 模块的成员以您想要的名称访问在导入对象中使用。
根据平台的不同,如果 wasm 模块在 Web 浏览器中 运行,请按照所提及的方式进行获取和实例化。当 nodejs 中的 运行 WASM 时,WASI 甚至可以提供文件系统沙盒。它可以使用 WASI
实例化中使用节点 Fs 从磁盘读取文件
const importObject = { wasi_snapshot_preview1: wasi.wasiImport };
const wasm = await WebAssembly.compile(fs.readFileSync('./demo.wasm'));
const instance = await WebAssembly.instantiate(wasm, importObject);
wasi.start(instance);
在webassembly.org,JS API页面,javascript中引入WebAssembly的方式是
fetch('example.wasm').then(response => response.arrayBuffer())
.then(bytes => instantiate(bytes, importObject))
.then(instance => instance.exports.e());
emcc 发出的 js 文件似乎就是这样做的。
但是当我为 Rust 的 Cargo 使用 wasm-pack 时,javascript 文件只是 import * as wasm from './example.wasm'
这两者有什么区别?直接导入是新支持的功能吗?当使用直接导入时,我如何从 javascript 访问 WebAssembly 的内存,因为我没有像使用第一种方法那样将它们传递给 WebAssembly 模块?
WebAssembly 模块的声明式导入尚未标准化。我假设 wasm-pack 的目标是 Node.js 的实验性导入功能:https://www.joyent.com/blog/improved-wasm-support-coming-to-node#importing-webassembly-modules
如何访问内存取决于模块:如果它导出它,您可以作为成员访问它,如果它导入它,它必须作为 ES6 模块的成员以您想要的名称访问在导入对象中使用。
根据平台的不同,如果 wasm 模块在 Web 浏览器中 运行,请按照所提及的方式进行获取和实例化。当 nodejs 中的 运行 WASM 时,WASI 甚至可以提供文件系统沙盒。它可以使用 WASI
实例化中使用节点 Fs 从磁盘读取文件 const importObject = { wasi_snapshot_preview1: wasi.wasiImport };
const wasm = await WebAssembly.compile(fs.readFileSync('./demo.wasm'));
const instance = await WebAssembly.instantiate(wasm, importObject);
wasi.start(instance);