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

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

ブラウザ実装状況

Update compatibility data on GitHub
デスクトップモバイルサーバー
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewAndroid 版 ChromeEdge MobileAndroid 版 FirefoxAndroid 版 OperaiOS 版 SafariSamsung InternetNode.js
基本対応Chrome 完全対応 57Edge 完全対応 16Firefox 完全対応 52
補足
完全対応 52
補足
補足 Disabled in the Firefox 52 Extended Support Release (ESR).
IE 未対応 なしOpera 完全対応 44Safari 完全対応 11WebView Android 完全対応 57Chrome Android 完全対応 57Edge Mobile 完全対応 あり
無効
完全対応 あり
無効
無効 This feature is behind the Experimental JavaScript Features preference.
Firefox Android 完全対応 52
補足
完全対応 52
補足
補足 Disabled in the Firefox 52 Extended Support Release (ESR).
Opera Android 完全対応 44Safari iOS 完全対応 11Samsung Internet Android 完全対応 7.0nodejs 完全対応 8.0.0

凡例

完全対応  
完全対応
未対応  
未対応
実装ノートを参照してください。
実装ノートを参照してください。
ユーザーが明示的にこの機能を有効にしなければなりません。
ユーザーが明示的にこの機能を有効にしなければなりません。

関連情報

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

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