WebAssembly.compileStreaming()

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.compileStreaming() 関数は WebAssembly.Module を直接、基礎的なソースのストリームからコンパイルします。この関数はモジュールをインスタンス化する前にコンパイルする必要がある場合に役立ちます(そうでない場合は、WebAssembly.instantiateStreaming() 関数を使用してください)。

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

構文

js
WebAssembly.compileStreaming(source)

引数

source

ストリーム、コンパイルする .wasm モジュールのソースコードを表す Response オブジェクト、またはそれで履行されるプロミスです。

返値

Promise で、コンパイルされたモジュールを表す WebAssembly.Module に解決します。

例外

  • sourceResponse でも Response に解決する Promise でもなかった場合、プロミスは TypeError で拒否されます。
  • コンパイルに失敗した場合、プロミスは WebAssembly.CompileError で拒否されます。
  • sourcePromise が拒否された場合、プロミスはエラーで拒否されます。
  • sourceResult にエラーがあった場合(MIME タイプが不正であるなど)、プロミスはエラーで拒否されます。

ストリーミングのコンパイル

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

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

WebAssembly.compileStreaming(fetch("simple.wasm"))
  .then((module) => WebAssembly.instantiate(module, importObject))
  .then((instance) => instance.exports.exported_func());

結果として受け取ったモジュールインスタンスはその後 WebAssembly.instantiate() を使用してインスタンス化され、エクスポートされた関数が実行されます。

仕様書

Specification
WebAssembly Web API
# dom-webassembly-compilestreaming

ブラウザーの互換性

BCD tables only load in the browser

関連情報