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 を参照してください。
構文
WebAssembly.compileStreaming(source)
引数
返値
Promise
で、コンパイルされたモジュールを表す WebAssembly.Module
に解決します。
例外
source
がResponse
でもResponse
に解決するPromise
でもなかった場合、プロミスはTypeError
で拒否されます。- コンパイルに失敗した場合、プロミスは
WebAssembly.CompileError
で拒否されます。 source
のPromise
が拒否された場合、プロミスはエラーで拒否されます。source
のResult
にエラーがあった場合(MIME タイプが不正であるなど)、プロミスはエラーで拒否されます。
例
ストリーミングのコンパイル
次の例 (Github上のデモ compile-streaming.html と、動作例を参照してください) では、ソースから直接 .wasm モジュールをストリームして、 WebAssembly.Module
オブジェクトにコンパイルしています。compileStreaming()
関数は Response
オブジェクトを渡すプロミスを受け取るので、直接 fetch()
の呼び出し結果を渡すことができます。
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