WebAssembly.instantiateStreaming()

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

WebAssembly.instantiateStreaming(source, importObject)

引数

source

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

importObject 省略可

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

返値

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

例外

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

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

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

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

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

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

仕様書

Specification
WebAssembly Web API
# dom-webassembly-instantiatestreaming

ブラウザーの互換性

BCD tables only load in the browser

関連情報