WebAssembly.Instance() コンストラクター
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since October 2017.
WebAssembly.Instance()
コンストラクターは、新しい Instance
オブジェクトを生成します。これはステートフルで実行可能な WebAssembly.Module
のインスタンスです。
構文
警告:
巨大なモジュールのインスタンス化は高コストになる可能性があるので、開発者が同期的な Instance()
コンストラクターを使用するのは、絶対に必要な場合のみにするべきです。それ以外の場合はすべて、WebAssembly.instantiateStreaming()
メソッドを使用してください。
new WebAssembly.Instance(module, importObject);
引数
- module
-
インスタンス化する
WebAssembly.Module
オブジェクト。 - importObject 省略可
-
新しく生成される
Instance
にインポートされる値を持つオブジェクトで、例えば関数やWebAssembly.Memory
オブジェクトなどです。モジュール内で宣言されたインポートそれぞれに対応するプロパティが存在する必要があります。そうでない場合、WebAssembly.LinkError
が発生します。
例
WebAssembly モジュールの同期的なインスタンス化
次のように WebAssembly.Instance()
コンストラクター関数を呼び出して、渡した WebAssembly.Module
オブジェクトを同期的にインスタンス化することができます。
const importObject = {
imports: {
imported_func: function (arg) {
console.log(arg);
},
},
};
fetch("simple.wasm")
.then((response) => response.arrayBuffer())
.then((bytes) => {
let mod = new WebAssembly.Module(bytes);
let instance = new WebAssembly.Instance(mod, importObject);
instance.exports.exported_func();
});
ただし、Instance
を取得する方法としては、次のように、非同期の WebAssembly.instantiateStreaming()
関数を使用することをお勧めします。
const importObject = {
imports: {
imported_func: function (arg) {
console.log(arg);
},
},
};
WebAssembly.instantiateStreaming(fetch("simple.wasm"), importObject).then(
(obj) => obj.instance.exports.exported_func(),
);
仕様書
Specification |
---|
WebAssembly JavaScript Interface # dom-instance-instance |
ブラウザーの互換性
BCD tables only load in the browser