WebAssembly.Instance() コンストラクター

WebAssembly.Instance() コンストラクターは、新しい Instance オブジェクトを生成します。これはステートフルで実行可能な WebAssembly.Module のインスタンスです。

構文

Warning: 巨大なモジュールのインスタンス化は高コストになる可能性があるので、開発者が同期的な 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

関連情報