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 の定義
標準  

ブラウザー実装状況

Update compatibility data on GitHub
デスクトップモバイルサーバー
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewAndroid 版 ChromeEdge MobileAndroid 版 FirefoxAndroid 版 OperaiOS 版 SafariSamsung InternetNode.js
基本対応Chrome 完全対応 68
完全対応 68
未対応 60 — 63
補足
補足 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.
Edge 未対応 なし
補足
未対応 なし
補足
補足 Support was removed to mitigate speculative execution side-channel attacks (Windows blog).
Firefox 完全対応 57
補足 無効
完全対応 57
補足 無効
補足 Support was disabled by default to mitigate speculative execution side-channel attacks (Mozilla Security Blog).
無効 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.
未対応 55 — 57
未対応 46 — 55
無効
無効 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.
IE 未対応 なしOpera 未対応 なしSafari 未対応 10.1 — ?WebView Android 未対応 60 — 63
補足
未対応 60 — 63
補足
補足 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.
Chrome Android 未対応 60 — 63
補足
未対応 60 — 63
補足
補足 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.
Edge Mobile ? Firefox Android 完全対応 57
補足 無効
完全対応 57
補足 無効
補足 Support was disabled by default to mitigate speculative execution side-channel attacks (Mozilla Security Blog).
無効 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.
未対応 55 — 57
未対応 46 — 55
無効
無効 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.
Opera Android 未対応 なしSafari iOS 未対応 なしSamsung Internet Android 未対応 なしnodejs 完全対応 8.10.0
SharedArrayBuffer in DataViewChrome 完全対応 68
完全対応 68
未対応 60 — 63
補足
補足 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.
Edge 未対応 なし
補足
未対応 なし
補足
補足 Support was removed to mitigate speculative execution side-channel attacks (Windows blog).
Firefox 完全対応 57
補足 無効
完全対応 57
補足 無効
補足 Support was disabled by default to mitigate speculative execution side-channel attacks (Mozilla Security Blog).
無効 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.
未対応 55 — 57
未対応 46 — 55
無効
無効 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.
IE 未対応 なしOpera 未対応 なしSafari 未対応 10.1 — ?WebView Android 未対応 60 — 63
補足
未対応 60 — 63
補足
補足 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.
Chrome Android 未対応 60 — 63
補足
未対応 60 — 63
補足
補足 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.
Edge Mobile ? Firefox Android 完全対応 57
補足 無効
完全対応 57
補足 無効
補足 Support was disabled by default to mitigate speculative execution side-channel attacks (Mozilla Security Blog).
無効 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.
未対応 55 — 57
未対応 46 — 55
無効
無効 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.
Opera Android 未対応 なしSafari iOS 未対応 なしSamsung Internet Android 未対応 なしnodejs 未対応 なし
prototypeChrome 完全対応 68
完全対応 68
未対応 60 — 63
補足
補足 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.
Edge 未対応 なし
補足
未対応 なし
補足
補足 Support was removed to mitigate speculative execution side-channel attacks (Windows blog).
Firefox 完全対応 57
補足 無効
完全対応 57
補足 無効
補足 Support was disabled by default to mitigate speculative execution side-channel attacks (Mozilla Security Blog).
無効 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.
未対応 55 — 57
未対応 46 — 55
無効
無効 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.
IE 未対応 なしOpera 未対応 なしSafari 未対応 10.1 — ?WebView Android 未対応 60 — 63
補足
未対応 60 — 63
補足
補足 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.
Chrome Android 未対応 60 — 63
補足
未対応 60 — 63
補足
補足 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.
Edge Mobile ? Firefox Android 完全対応 57
補足 無効
完全対応 57
補足 無効
補足 Support was disabled by default to mitigate speculative execution side-channel attacks (Mozilla Security Blog).
無効 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.
未対応 55 — 57
未対応 46 — 55
無効
無効 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.
Opera Android 未対応 なしSafari iOS 未対応 なしSamsung Internet Android 未対応 なしnodejs 未対応 なし
byteLengthChrome 完全対応 68
完全対応 68
未対応 60 — 63
補足
補足 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.
Edge 完全対応 16
補足
完全対応 16
補足
補足 Support was removed to mitigate speculative execution side-channel attacks (Windows blog).
Firefox 完全対応 57
補足 無効
完全対応 57
補足 無効
補足 Support was disabled by default to mitigate speculative execution side-channel attacks (Mozilla Security Blog).
無効 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.
未対応 55 — 57
未対応 46 — 55
無効
無効 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.
IE 未対応 なしOpera 未対応 なしSafari 未対応 10.1 — ?WebView Android 未対応 60 — 63
補足
未対応 60 — 63
補足
補足 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.
Chrome Android 未対応 60 — 63
補足
未対応 60 — 63
補足
補足 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.
Edge Mobile ? Firefox Android 完全対応 57
補足 無効
完全対応 57
補足 無効
補足 Support was disabled by default to mitigate speculative execution side-channel attacks (Mozilla Security Blog).
無効 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.
未対応 55 — 57
未対応 46 — 55
無効
無効 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.
Opera Android 未対応 なしSafari iOS 未対応 なしSamsung Internet Android 未対応 なしnodejs 完全対応 8.10.0
sliceChrome 完全対応 68
完全対応 68
未対応 60 — 63
補足
補足 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.
Edge 完全対応 16
補足
完全対応 16
補足
補足 Support was removed to mitigate speculative execution side-channel attacks (Windows blog).
Firefox 完全対応 57
補足 無効
完全対応 57
補足 無効
補足 Support was disabled by default to mitigate speculative execution side-channel attacks (Mozilla Security Blog).
無効 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.
未対応 55 — 57
未対応 46 — 55
無効
無効 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.
IE 未対応 なしOpera 未対応 なしSafari 未対応 10.1 — ?WebView Android 未対応 60 — 63
補足
未対応 60 — 63
補足
補足 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.
Chrome Android 未対応 60 — 63
補足
未対応 60 — 63
補足
補足 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.
Edge Mobile ? Firefox Android 完全対応 57
補足 無効
完全対応 57
補足 無効
補足 Support was disabled by default to mitigate speculative execution side-channel attacks (Mozilla Security Blog).
無効 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.
未対応 55 — 57
未対応 46 — 55
無効
無効 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.
Opera Android 未対応 なしSafari iOS 未対応 なしSamsung Internet Android 未対応 なしnodejs 完全対応 8.10.0

凡例

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

関連項目

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

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