WebAssembly.instantiateStreaming()

WebAssembly.instantiateStreaming() 関数は、ソースのストリームから直接 WebAssembly モジュールをコンパイルしてインスタンス化します。これは、 wasm コードをロードするための最も効率的で最適な方法です。

メモ: 厳格なコンテンツセキュリティポリシー (CSP) のあるウェブページでは、 WebAssembly のコンパイルやモジュールの実行がブロックされることがあります。 WebAssembly のコンパイルと実行を許可することについての詳しい情報は、 CSP の script-src を参照してください。

構文

js
WebAssembly.instantiateStreaming(source, importObject)

引数

source

Response オブジェクト、またはそれで解決するプロミスで、コンパイルしてインスタンス化する .wasm モジュールのソースを表します。

importObject 省略可

関数や WebAssembly.Memory オブジェクトなど、新しく生成される Instance にインポートされる値を持つオブジェクト。コンパイルされたモジュールの宣言されたインポートそれぞれに対応するプロパティが存在する必要があります。そうでない場合、WebAssembly.LinkError が発生します。

返値

Promise で、次の 2 つのフィールドを持つ ResultObject で解決します。

例外

ストリーミングのインスタンス化

次の例 (Github上のデモ instantiate-streaming.html と、動作例を参照してください) では、ソースから .wasm モジュールを直接コンパイルしてインスタンス化しています。このプロミスは ResultObject で履行されます。 instantiateStreaming() 関数は Response オブジェクトに解決するプロミスを受け取るので、直接 fetch() の呼び出し結果を渡すことができます。

js
const importObject = { imports: { imported_func: (arg) => console.log(arg) } };

WebAssembly.instantiateStreaming(fetch("simple.wasm"), importObject).then(
  (obj) => obj.instance.exports.exported_func(),
);

最後に ResultObject が持つ instance メンバーにアクセスして、エクスポートされた関数を実行しています。

メモ: これを動作するようにするには、サーバーが .wasm ファイルを application/wasm の MIME タイプで返す必要があります。

仕様書

Specification
WebAssembly Web API
# dom-webassembly-instantiatestreaming

ブラウザーの互換性

BCD tables only load in the browser

関連情報