WebAssembly.Module
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.
* Some parts of this feature may have varying levels of support.
WebAssembly.Module
オブジェクトには、ブラウザーでコンパイルされたステートレスな WebAssembly コードが含まれています。これを効率的にワーカー間で共有したり、複数回インスタンス化したりすることができます。
コンストラクター
WebAssembly.Module()
新しい
Module
オブジェクトを生成します。
静的プロパティ
WebAssembly.Module.customSections()
Module
と文字列を指定すると、モジュール内の与えられた文字列を名前に持つすべてのカスタムセクションの内容を返します。WebAssembly.Module.exports()
Module
を指定すると、エクスポート宣言の情報を配列として返します。WebAssembly.Module.imports()
Module
を指定すると、インポート宣言の情報を配列として返します。
例
コンパイル済みのモジュールをワーカーに送信
以下の例では (GitHub 上の index-compile.html および実行例も参照)、読み込まれた simple.wasm
のバイトコードを WebAssembly.compileStreaming()
メソッドでコンパイルし、結果の Module
インスタンスをワーカーへ、 postMessage()
を使用して送信します。
var worker = new Worker("wasm_worker.js"); WebAssembly.compileStreaming(fetch("simple.wasm")).then((mod) => worker.postMessage(mod), );
ワーカー内では (wasm_worker.js
を参照)、モジュールを使用するための import オブジェクトを定義し、メインスレッドからモジュールを受け取るためのイベントハンドラーをセットアップします。モジュールを受け取ったら、 WebAssembly.instantiate()
メソッドを使ってインスタンスを作成し、その中からエクスポートされた関数を呼び出します。
var importObject = { imports: { imported_func: function (arg) { console.log(arg); }, }, }; onmessage = function (e) { console.log("module received from main thread"); var mod = e.data; WebAssembly.instantiate(mod, importObject).then(function (instance) { instance.exports.exported_func(); }); };
仕様書
Specification |
---|
WebAssembly JavaScript Interface # modules |