WebAssembly

Baseline Widely available *

This feature is well established and works across many devices and browser versions. It’s been available across browsers since October 2017.

* Some parts of this feature may have varying levels of support.

WebAssembly は JavaScript のオブジェクトで、 WebAssembly に関するすべての機能の名前空間の役割をします。

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

概要

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

コンストラクタープロパティ

WebAssembly.CompileError()

WebAssembly のデコードまたは検証中のエラーを示します。

WebAssembly.Global()

グローバル変数のインスタンスを表し、 JavaScript からアクセス可能で、 1 つ以上の WebAssembly.Module インスタンスの間でインポート/エクスポート可能です。これにより、複数のモジュールを動的リンクすることができます。

WebAssembly.Instance()

ステートフルで、実行可能な WebAssembly.Module のインスタンスです。

WebAssembly.LinkError()

(関数開始後のトラップではなく) モジュールの初期化時に発生したエラーを示します。

WebAssembly.Memory()

buffer プロパティが可変長の ArrayBuffer であり、これが WebAssembly の Instance からアクセス可能なメモリーのバイト列を保持しています。

WebAssembly.Module()

ステートレスの WebAssembly のコードであり、ブラウザーでコンパイルされ、効率的にワーカーと共有することができ、複数回インスタンス化することができます。

WebAssembly.RuntimeError()

WebAssembly がトラップを指定するたびに例外として発生するエラー型です。

WebAssembly.Table()

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) を返します。

.wasm モジュールを読み込み、コンパイルし、インスタンス化する

次の例 (GitHub 上の instantiate-streaming.html のデモと、動作例も参照) は、基礎となるソースから .wasm モジュールを直接ストリーミングし、コンパイルしてインスタンス化し、 ResultObject で履行されるプロミスを返します。 instantiateStreaming() 関数は Response オブジェクトのプロミスを受け付けるので、 fetch() の呼び出し結果を直接渡すと、履行されたときにレスポンスを関数に渡すことができます。

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

WebAssembly.instantiateStreaming(fetch("simple.wasm"), importObject).then(
  (obj) => obj.instance.exports.exported_func(),
);

それから ResultObject の instance メンバーにアクセスすると、呼び出し対象のエクスポートされた関数が入っています。

仕様書

Specification
WebAssembly JavaScript Interface
# webassembly-namespace

ブラウザーの互換性

Report problems with this compatibility data on GitHub
desktopmobileserver
Chrome
Edge
Firefox
Opera
Safari
Chrome Android
Firefox for Android
Opera Android
Safari on iOS
Samsung Internet
WebView Android
WebView on iOS
Deno
Node.js
api
CompileError
CompileError() constructor
Exception
Exception() constructor
options.traceStack parameter
Non-standard
Exception.getArg
Exception.is
Stack trace
Non-standard
Global
Global() constructor
Global.value
Global.valueOf
Instance
Instance() constructor
Instance.exports
LinkError
LinkError() constructor
Memory
Memory() constructor
shared flag
Memory.buffer
Memory.grow
Module
Module() constructor
compileOptions parameter
customSections() static method
exports() static method
imports() static method
RuntimeError
RuntimeError() constructor
Table
Table() constructor
Table.get
Table.grow
Table.length
Table.set
Tag
Tag() constructor
Tag.type
compileStreaming() static method
compileOptions parameter
compile() static method
compileOptions parameter
instantiateStreaming() static method
compileOptions parameter
instantiate() static method
compileOptions parameter
validate() static method
compileOptions parameter

Legend

Tip: you can click/tap on a cell for more information.

Full support
Full support
No support
No support
Non-standard. Check cross-browser support before using.
See implementation notes.
User must explicitly enable this feature.

関連情報