これは実験段階の機能です。
この機能は複数のブラウザーで開発中の状態にあります。互換性テーブルをチェックしてください。また、実験段階の機能の構文と挙動は、仕様変更に伴い各ブラウザーの将来のバージョンで変更になる可能性があることに注意してください。

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 API
compile() の定義
ドラフト 初回ドラフト定義。

ブラウザ実装状況

機能ChromeEdgeFirefoxInternet ExplorerOperaSafari
基本サポート5716522 無し4411
機能Android webviewChrome for AndroidEdge mobileFirefox for AndroidIE mobileOpera AndroidiOS Safari
基本サポート5757 有り1522 無し ?11

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

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

関連情報

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

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