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

WebAssembly JavaScript オブジェクトは全ての WebAssembly に関連する機能の名前空間として振る舞います。

他のグローバルオブジェクトとは異なり、WebAssembly はコンストラクタではありません (関数オブジェクトではない) 。数学定数、関数の名前空間である Math や 、国際化コンストラクタと他の言語に依存する関数のための Intl と同等のものです。

概要

WebAssembly オブジェクトの主な用途は次のとおりです:

メソッド

WebAssembly.instantiate()
WebAssembly コードをコンパイル、インスタンス化するための主要な API で、 Module と、その最初の Instance を返します。
WebAssembly.instantiateStreaming()
ソースのストリームから直接 WebAssembly モジュールをコンパイル、インスタンス化し、 Module と、その最初の Instance を返します。
WebAssembly.compile()
WebAssembly.Module を用いて WebAssembly バイナリコードからコンパイルします。インスタンス化は別ステップとして分離されます。
WebAssembly.compileStreaming()
ソースのストリームから直接 WebAssembly.Module にコンパイルします。インスタンス化は別ステップとして分離されます。
WebAssembly.validate()
WebAssembly バイナリコードの型付き配列を検証し、バイト列が有効な WebAssembly コードか (true) 否か (false) を返します。

コンストラクタ

WebAssembly.Module()
新しい WebAssembly Module オブジェクトを生成します。
WebAssembly.Instance()
新しい WebAssembly Instance オブジェクトを生成します。
WebAssembly.Memory()
新しい WebAssembly Memory オブジェクトを生成します。
WebAssembly.Table()
新しい WebAssembly Table オブジェクトを生成します。
WebAssembly.CompileError()
新しい WebAssembly CompileError オブジェクトを生成します。
WebAssembly.LinkError()
新しい WebAssembly LinkError オブジェクトを生成します。
WebAssembly.RuntimeError()
新しい WebAssembly RuntimeError オブジェクトを生成します。

fetch を使用して WebAssembly バイトコードをフェッチした後、WebAssembly.instantiate() 関数を使用してモジュールをコンパイル、インスタンス化します。その過程で、WebAssembly モジュールに JavaScript の関数をインポートします。このプロミスは解決時に Module と Instance を含むオブジェクト (result) を渡します。次に、Instance からエクスポートされている エクスポートされた WebAssembly 関数 を呼び出します。

var importObject = {
  imports: {
    imported_func: function(arg) {
      console.log(arg);
    }
  }
};

fetch('simple.wasm').then(response =>
  response.arrayBuffer()
).then(bytes =>
  WebAssembly.instantiate(bytes, importObject)
).then(result =>
  result.instance.exports.exported_func()
);

: Github上の例 (動作例) のindex.htmlでは、我々で定義した fetchAndInstantiate() ライブラリ関数を使用しています。

仕様

仕様 策定状況 コメント
WebAssembly JavaScript Interface
WebAssembly の定義
草案 初回ドラフト定義。

ブラウザ実装状況

機能ChromeEdgeFirefoxInternet ExplorerOperaSafari
基本対応5716522 なし4411
CompileError5716522 なし4411
Instance5716522 なし4411
LinkError5716522 なし4411
Memory5716522 なし4411
Module5716522 なし4411
RuntimeError5716522 なし4411
Table5716522 なし4411
compile5716522 なし4411
compileStreaming61 なし58 なし47 なし
instantiate5716522 なし4411
instantiateStreaming61 なし58 なし47 なし
validate5716522 なし4411
機能Android webviewChrome for AndroidEdge mobileFirefox for AndroidOpera AndroidiOS SafariSamsung Internet
基本対応5757 あり1522 ?117.0
CompileError5757 あり1522 ?117.0
Instance5757 あり1522 ?117.0
LinkError5757 あり1522 ?117.0
Memory5757 あり1522 ?117.0
Module5757 あり1522 ?117.0
RuntimeError5757 あり1522 ?117.0
Table5757 あり1522 ?117.0
compile5757 あり1522 ?117.0
compileStreaming6161 なし58 ? なし なし
instantiate5757 あり1522 ?117.0
instantiateStreaming6161 なし58 ? なし なし
validate5757 あり1522 ?117.0

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

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

関連情報

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

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