WebAssembly.instantiateStreaming()
Baseline
Widely available
*
This feature is well established and works across many devices and browser versions. It’s been available across browsers since 2021年9月.
* Some parts of this feature may have varying levels of support.
WebAssembly.instantiateStreaming() 関数は、ソースのストリームから直接 WebAssembly モジュールをコンパイルしてインスタンス化します。これは、 wasm コードをロードするための最も効率的で最適な方法です。
メモ: 厳格なコンテンツセキュリティポリシー (CSP) のあるウェブページでは、 WebAssembly のコンパイルやモジュールの実行がブロックされることがあります。 WebAssembly のコンパイルと実行を許可することについての詳しい情報は、 CSP の script-src を参照してください。
構文
WebAssembly.instantiateStreaming(source, importObject)
引数
source-
Responseオブジェクト、またはそれで解決するプロミスで、コンパイルしてインスタンス化する .wasm モジュールのソースを表します。 importObject省略可-
関数や
WebAssembly.Memoryオブジェクトなど、新しく生成されるInstanceにインポートされる値を持つオブジェクト。コンパイルされたモジュールの宣言されたインポートそれぞれに対応するプロパティが存在する必要があります。そうでない場合、WebAssembly.LinkErrorが発生します。
返値
Promise で、次の 2 つのフィールドを持つ ResultObject で解決します。
module: コンパイルされたWebAssembly.Moduleオブジェクト。このModuleは再度インスタンス化することや、postMessage() 経由で共有することができます。instance:WebAssembly.Instanceオブジェクトで、すべてのエクスポートされた WebAssembly 関数を含みます。
例外
- いずれかの引数が正しい型または構造でない場合、
TypeErrorが発生します。 - 失敗した場合、プロミスは失敗の原因に応じて
WebAssembly.CompileError、WebAssembly.LinkError、WebAssembly.RuntimeErrorをもって拒否されます。
例
>ストリーミングのインスタンス化
次の例 (Github上のデモ instantiate-streaming.html と、動作例を参照してください) では、ソースから .wasm モジュールを直接コンパイルしてインスタンス化しています。このプロミスは ResultObject で履行されます。 instantiateStreaming() 関数は Response オブジェクトに解決するプロミスを受け取るので、直接 fetch() の呼び出し結果を渡すことができます。
const importObject = { imports: { imported_func: (arg) => console.log(arg) } };
WebAssembly.instantiateStreaming(fetch("http://developer.mozilla.org/simple.wasm"), importObject).then(
(obj) => obj.instance.exports.exported_func(),
);
最後に ResultObject が持つ instance メンバーにアクセスして、エクスポートされた関数を実行しています。
メモ:
これを動作するようにするには、サーバーが .wasm ファイルを application/wasm の MIME タイプで返す必要があります。
仕様書
| Specification |
|---|
| WebAssembly Web API> # dom-webassembly-instantiatestreaming> |
ブラウザーの互換性
Loading…