このページはコミュニティーの尽力で英語から翻訳されました。MDN Web Docs コミュニティーについてもっと知り、仲間になるにはこちらから。

View in English Always switch to English

WebAssembly

Baseline
広く利用可能
*

この機能は広く実装されており、多くのバージョンの端末やブラウザーで動作します。2017年10月以降、すべてのブラウザーで利用可能です。

* この機能の一部は、対応レベルが異なる場合があります。

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.Suspending

一時停止関数を表します。これは、非同期(Promise に基づく)JavaScript 関数であり、Wasm モジュールにインポートされ、その内部から呼び出されると、プロミスが解決されるまで実行が一時停止されます。

WebAssembly.Table

WebAssembly のテーブルを表す配列風の構造で、多数の参照(英語)を保持します(関数の参照など)。

WebAssembly.Tag

WebAssembly の例外の 1 つの型を表すオブジェクト。

WebAssembly.Exception

WebAssembly/JavaScript の境界内および境界をまたいで、発生、捕捉、再発生させることが可能な WebAssembly の例外オブジェクト。

静的プロパティ

WebAssembly.JSTag

JavaScript ホストで発生した例外を表す組み込みの WebAssembly.Tag — これにより、JavaScript で発生した例外を Wasm モジュール内部から処理することができます。

静的メソッド

WebAssembly.compile()

WebAssembly.Module を用いて WebAssembly バイナリーコードからコンパイルします。インスタンス化は別ステップとして分離されます。

WebAssembly.compileStreaming()

ソースのストリームから直接 WebAssembly.Module にコンパイルします。インスタンス化は別ステップとして分離されます。

WebAssembly.instantiate()

WebAssembly コードをコンパイル、インスタンス化するための主要な API で、 Module と、その最初の Instance を返します。

WebAssembly.instantiateStreaming()

ソースのストリームから直接 WebAssembly モジュールをコンパイル、インスタンス化し、 Module と、その最初の Instance を返します。

WebAssembly.promising()

非同期操作(つまり、WebAssembly.Suspending() コンストラクターを使用して作成された、インポートされた一時停止関数)に依存するエクスポートされた Wasm 関数をラップし、それを Promise に変換します。

WebAssembly.validate()

WebAssembly バイナリーコードの型付き配列を検証し、バイト列が有効な WebAssembly コードか (true) 否か (false) を返します。

例

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

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

js
const importObject = {
  my_namespace: { imported_func: (arg) => console.log(arg) },
};

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

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

仕様書

仕様書
WebAssembly JavaScript Interface
# webassembly-namespace

ブラウザーの互換性

関連情報