WebAssembly.Instance() 构造函数
WebAssembly.Instance() 构造函数创建一个新的 Instance 对象,它是一个 WebAssembly.Module 的有状态、可执行的实例。
警告: 由于实例化大型模块可能开销很大,开发人员应仅在绝对需要同步实例化时才使用 Instance() 构造函数;在所有其他情况下,应使用异步的 WebAssembly.instantiateStreaming() 方法。
语法
js
new WebAssembly.Instance(module, importObject)
参数
模块-
要实例化的
WebAssembly.Module对象。 importObject可选-
一个包含要导入到新创建的
Instance中的值的对象,例如函数或WebAssembly.Memory对象。对于module的每个声明的导入,都必须有一个匹配的属性,否则将抛出WebAssembly.LinkError。
异常
- 如果任一参数的类型或结构不正确,将抛出
TypeError。 - 如果操作失败,将根据失败原因抛出
WebAssembly.CompileError、WebAssembly.LinkError或WebAssembly.RuntimeError之一。 - 某些浏览器可能会抛出
RangeError,因为它们禁止在 UI 线程上编译和实例化具有大型缓冲区的 Wasm。
示例
同步实例化 WebAssembly 模块
可以调用 WebAssembly.Instance() 构造函数来同步实例化给定的 WebAssembly.Module 对象,例如:
js
const importObject = {
my_namespace: {
imported_func(arg) {
console.log(arg);
},
},
};
fetch("simple.wasm")
.then((response) => response.arrayBuffer())
.then((bytes) => {
const mod = new WebAssembly.Module(bytes);
const instance = new WebAssembly.Instance(mod, importObject);
instance.exports.exported_func();
});
然而,获取 Instance 的首选方法是通过异步的 WebAssembly.instantiateStreaming() 函数,例如这样做:
js
const importObject = {
my_namespace: {
imported_func(arg) {
console.log(arg);
},
},
};
WebAssembly.instantiateStreaming(fetch("simple.wasm"), importObject).then(
(obj) => obj.instance.exports.exported_func(),
);
规范
| 规范 |
|---|
| WebAssembly JavaScript 接口 # dom-instance-instance |
浏览器兼容性
加载中…