WebAssembly.instantiateStreaming()
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("simple.wasm"), importObject).then(
(obj) => obj.instance.exports.exported_func(),
);
最後に ResultObject
が持つ instance メンバーにアクセスして、エクスポートされた関数を実行しています。
メモ:
これを動作するようにするには、サーバーが .wasm
ファイルを application/wasm
の MIME タイプで返す必要があります。
仕様書
Specification |
---|
WebAssembly Web API # dom-webassembly-instantiatestreaming |
ブラウザーの互換性
BCD tables only load in the browser