SharedArrayBuffer オブジェクトは、ジェネリックで固定長の生バイナリデータバッファーを表すために使用されます。ArrayBuffer オブジェクトと似ていますが、これらは共有メモリー上にビューを生成するために使用されます。ArrayBuffer と異なり、SharedArrayBuffer は分離できません。

SharedArrayBuffer はすべての主要なブラウザーで 2018 年 1 月 5 日に、Spectre への対応として無効化されましたので注意してください。

構文

new SharedArrayBuffer(length)

パラメーター

length
array buffer を生成するバイト単位のサイズ。

戻り値

指定したサイズの新しい SharedArrayBuffer。コンテンツは 0 に初期化されている。

説明

メモリーの割り当てと共有

クラスター内のあるエージェントから別のエージェント (エージェントとは、ウェブページのメインプログラムまたはその web worker のひとつ) へ、SharedArrayBuffer オブジェクトを使用してメモリーを共有するために、postMessagestructured cloning を使用します。

structured clone アルゴリズムは SharedArrayBuffers と、SharedArrayBuffers にマッピングされた TypedArrays を受け入れます。どちらの場合も SharedArrayBuffer オブジェクトは受信者に転送されて、受信側のエージェントで新たなプライベートの SharedArrayBuffer オブジェクトになります (ArrayBuffer と同じように)。しかし、2 つの SharedArrayBuffer オブジェクトから参照される共有データブロックは同一のデータブロックであり、あるエージェントによるブロックへの副作用は、結果的に他方のエージェントからも見えます。

var sab = new SharedArrayBuffer(1024);
worker.postMessage(sab);

Atomic 操作で共有メモリを更新、同期する

共有メモリーは、worker 内でもメインスレッド内でも同時に生成や更新ができます。システム(CPU や OS、ブラウザー)のよっては、変更がすべてのコンテキストに通知されるまでに少々時間がかかります。同期するためには、atomic 操作が必要です。

SharedArrayBuffer オブジェクトを受け付ける API

生成には new 演算子が必要

SharedArrayBuffer コンストラクターは、new 演算子で呼び出される必要があります。new 演算子なしで関数として SharedArrayBuffer コンストラクターを呼び出すと、TypeError をスローします。

var sab = SharedArrayBuffer(1024);
// TypeError: calling a builtin SharedArrayBuffer constructor 
// without new is forbidden
var sab = new SharedArrayBuffer(1024);

プロパティ

SharedArrayBuffer.length
SharedArrayBuffer コンストラクターの length プロパティの値は 1。
SharedArrayBuffer.prototype
すべての SharedArrayBuffer オブジェクトにプロパティ追加を許可する。

SharedArrayBuffer プロトタイプオブジェクト

すべての SharedArrayBuffer インスタンスは SharedArrayBuffer.prototype を継承しています。

プロパティ

SharedArrayBuffer.prototype.constructor
オブジェクトの prototype を生成する関数を指定する。初期値は標準ビルトインの SharedArrayBuffer コンストラクタである。
SharedArrayBuffer.prototype.byteLength 読取専用
配列のバイト単位でのサイズ。これは配列が生成されたときに決定され、変更できない。 読み取り専用

メソッド

SharedArrayBuffer.prototype.slice(begin, end)
begin から end までの SharedArrayBuffer バイトのコピーを含む新しい SharedArrayBuffer を返す。beginend が負数だった場合、最初から参照するのとは対照的に、配列の終わりからインテックスを参照します。

仕様

仕様 状態 コメント
ECMAScript Latest Draft (ECMA-262)
SharedArrayBuffer の定義
ドラフト ES2017 で初期定義。
ECMAScript 2017 (ECMA-262)
SharedArrayBuffer の定義
標準  

ブラウザー実装状況

機能ChromeEdgeFirefoxInternet ExplorerOperaSafari
基本対応

68

60 — 632

なし3

574 5

55 — 57

46 — 556

なし なし10.1 —?
SharedArrayBuffer in DataView

68

60 — 632

なし3

574 5

55 — 57

46 — 556

なし なし10.1 —?
prototype

68

60 — 632

なし3

574 5

55 — 57

46 — 556

なし なし10.1 —?
byteLength

68

60 — 632

163

574 5

55 — 57

46 — 556

なし なし10.1 —?
slice

68

60 — 632

163

574 5

55 — 57

46 — 556

なし なし10.1 —?
機能Android webviewChrome for AndroidEdge mobileFirefox for AndroidOpera AndroidiOS SafariSamsung Internet
基本対応60 — 63160 — 631 ?

574 5

55 — 57

46 — 556

なし なし なし
SharedArrayBuffer in DataView60 — 63160 — 631 ?

574 5

55 — 57

46 — 556

なし なし なし
prototype60 — 63160 — 631 ?

574 5

55 — 57

46 — 556

なし なし なし
byteLength60 — 63160 — 631 ?

574 5

55 — 57

46 — 556

なし なし なし
slice60 — 63160 — 631 ?

574 5

55 — 57

46 — 556

なし なし なし

1. Chrome disabled SharedArrayBuffer on January 5, 2018 to help reduce the efficacy of speculative side-channel attacks. This is intended as a temporary measure until other mitigations are in place.

2. Chrome disabled SharedArrayBuffer on January 5, 2018 to help reduce the efficacy of speculative side-channel attacks. This was a temporary removal while mitigations were put in place.

3. Support was removed to mitigate speculative execution side-channel attacks (Windows blog).

4. Support was disabled by default to mitigate speculative execution side-channel attacks (Mozilla Security Blog).

5. From version 57: this feature is behind the javascript.options.shared_memory preference (needs to be set to true). To change preferences in Firefox, visit about:config.

6. From version 46 until version 55 (exclusive): this feature is behind the javascript.options.shared_memory preference (needs to be set to true). To change preferences in Firefox, visit about:config.

関連項目

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

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