WebAssembly.compile()
関数は WebAssembly バイナリコードから WebAssembly.Module
にコンパイルします。この関数はモジュールをインスタンス化する前にコンパイルする必要がある時に便利です。(そうでなければ、 WebAssembly.instantiate()
関数の使用が推奨されます。
構文
Promise<WebAssembly.Module> WebAssembly.compile(bufferSource);
パラメータ
- bufferSource
- コンパイルする 型付き配列 か ArrayBuffer を含む .wasm モジュールのバイナリコード。
戻り値
解決時にコンパイルされたモジュールを表す WebAssembly.Module
オブジェクト渡す Promise 。
例外
- バイナリソースが 型付き配列 でない場合、
TypeError
がスローされます。 - コンパイルが失敗したとき、プロミスは
WebAssembly.CompileError
で棄却されます。
例
以下の例では (Github上のデモ index-compile.html と 動作例 をご確認ください) compile()
関数を使ってロードした simple.wasm のバイトコードをコンパイルして、その後 postMessage() を使って worker に送信しています。
var worker = new Worker("wasm_worker.js");
fetch('simple.wasm').then(response =>
response.arrayBuffer()
).then(bytes =>
WebAssembly.compile(bytes)
).then(mod =>
worker.postMessage(mod)
);
ワーカー内で (wasm_worker.js を参照
) モジュールで使用するためのインポートオブジェクトを定義して、メインスレッドからモジュールを受け取るためのイベントハンドラをセットアップします。モジュールを受け取ったとき、 WebAssembly.Instantiate()
メソッドを使用してモジュールからインスタンスを生成します。内部からエクスポートされた関数を実行して、その後に WebAssembly.Module.exports
プロパティを使用してモジュール上で利用可能なエクスポートに関する情報を確認する方法を示します。
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();
});
var exports = WebAssembly.Module.exports(mod);
console.log(exports[0]);
};
仕様
仕様 | 策定状況 | コメント |
---|---|---|
WebAssembly JavaScript Interface compile() の定義 |
草案 | 初回ドラフト定義。 |
ブラウザ実装状況
BCD tables only load in the browser
関連情報
- WebAssembly overview page
- WebAssembly のコンセプト
- WebAssembly JavaScript API を使用する