これは実験的な機能です。本番で使用する前にブラウザー実装状況をチェックしてください。

WebAssembly.compile() 関数は WebAssembly バイナリコードから WebAssembly.Module にコンパイルします。この関数はモジュールをインスタンス化する前にコンパイルする必要がある時に便利です。(そうでなければ、 WebAssembly.instantiate() 関数の使用が推奨されます。

構文

Promise<WebAssembly.Module> WebAssembly.compile(bufferSource);

パラメータ

bufferSource
コンパイルする 型付き配列 か ArrayBuffer を含む .wasm モジュールのバイナリコード。

戻り値

解決時にコンパイルされたモジュールを表す WebAssembly.Module オブジェクト渡す Promise 。

例外

以下の例では (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() の定義
草案 初回ドラフト定義。

ブラウザ実装状況

機能ChromeEdgeFirefoxInternet ExplorerOperaSafari
基本対応5716522 なし4411
機能Android webviewChrome for AndroidEdge mobileFirefox for AndroidOpera AndroidiOS SafariSamsung Internet
基本対応5757 あり1522 ?117.0

1. This feature is behind the Experimental JavaScript Features preference.

2. Disabled in the Firefox 52 Extended Support Release (ESR).

関連情報

ドキュメントのタグと貢献者

 このページの貢献者: syu_kato
 最終更新者: syu_kato,