WebAssembly.compileStreaming()
Baseline
広く利用可能
*
この機能は広く実装されており、多くのバージョンの端末やブラウザーで動作します。2021年9月以降、すべてのブラウザーで利用可能です。
* この機能の一部は、対応レベルが異なる場合があります。
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() を使用してインスタンス化され、エクスポートされた関数が実行されます。
仕様書
| 仕様書 |
|---|
| WebAssembly Web API> # dom-webassembly-compilestreaming> |