WebAssembly.Instance() コンストラクター
Baseline
広く利用可能
この機能は広く実装されており、多くのバージョンの端末やブラウザーで動作します。2017年10月以降、すべてのブラウザーで利用可能です。
WebAssembly.Instance() コンストラクターは、新しい Instance オブジェクトを生成します。これはステートフルで実行可能な WebAssembly.Module のインスタンスです。
構文
警告:
巨大なモジュールのインスタンス化は高コストになる可能性があるので、開発者が同期的な Instance() コンストラクターを使用するのは、絶対に必要な場合のみにするべきです。それ以外の場合はすべて、WebAssembly.instantiateStreaming() メソッドを使用してください。
js
new WebAssembly.Instance(module, importObject);
引数
- module
-
インスタンス化する
WebAssembly.Moduleオブジェクト。 - importObject 省略可
-
新しく生成される
Instanceにインポートされる値を持つオブジェクトで、例えば関数やWebAssembly.Memoryオブジェクトなどです。モジュール内で宣言されたインポートそれぞれに対応するプロパティが存在する必要があります。そうでない場合、WebAssembly.LinkErrorが発生します。
例
>WebAssembly モジュールの同期的なインスタンス化
次のように WebAssembly.Instance() コンストラクター関数を呼び出して、渡した WebAssembly.Module オブジェクトを同期的にインスタンス化することができます。
js
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() 関数を使用することをお勧めします。
js
const importObject = {
imports: {
imported_func: function (arg) {
console.log(arg);
},
},
};
WebAssembly.instantiateStreaming(fetch("simple.wasm"), importObject).then(
(obj) => obj.instance.exports.exported_func(),
);
仕様書
| 仕様書 |
|---|
| WebAssembly JavaScript Interface> # dom-instance-instance> |