This is an experimental technology
Because this technology's specification has not stabilized, check the compatibility table for usage in various browsers. Also note that the syntax and behavior of an experimental technology is subject to change in future versions of browsers as the specification changes.
SharedArrayBuffer object is used to represent a generic, fixed-length raw binary data buffer, similar to the
ArrayBuffer object, but in a way that they can be used to create views on shared memory. Unlike an
SharedArrayBuffer cannot become detached.
- The size, in bytes, of the array buffer to create.
SharedArrayBuffer object of the specified size. Its contents are initialized to 0.
Allocating and sharing memory
To share memory using
SharedArrayBuffer objects from one agent in the cluster to another (an agent is either the web page’s main program or one of its web workers),
postMessage and structured cloning is used.
The structured clone algorithm accepts
TypedArrays mapped onto
SharedArrayBuffers. In both cases, the
SharedArrayBuffer object is transmitted to the receiver resulting in a new, private SharedArrayBuffer object in the receiving agent (just as for
ArrayBuffer). However, the shared data block referenced by the two
SharedArrayBuffer objects is the same data block, and a side effect to the block in one agent will eventually become visible in the other agent.
var sab = new SharedArrayBuffer(1024); worker.postMessage(sab);
In earlier versions of the specification,
SharedArrayBuffers needed to be explicitly transferred during structured cloning. However, a
SharedArrayBuffer is not a
Transferable object in the sense of HTML. Thus if a
SharedArrayBuffer object is present in the transfer list, then
postMessage will throw a
var sab = new SharedArrayBuffer(1024); worker.postMessage(sab, [sab]); // TypeError: SharedArrayBuffer must not be in the transfer list
Updating and synchronizing shared memory with Atomic operations
Shared memory can be created and updated simultaneously in workers or the main thread. Depending on the system (the CPU, the OS, the Browser) it can take a while until the change is propagated to all contexts. To synchronize, atomic operations are needed.
Constructing is required with
var sab = SharedArrayBuffer(1024); // TypeError: calling a builtin SharedArrayBuffer constructor // without new is forbidden
var sab = new SharedArrayBuffer(1024);
SharedArrayBufferconstructor's length property whose value is 1.
- Allows the addition of properties to all
SharedArrayBuffer prototype object
SharedArrayBuffer instances inherit from
- Specifies the function that creates an object's prototype. The initial value is the standard built-in
- The size, in bytes, of the array. This is established when the array is constructed and cannot be changed. Read only.
- Returns a new
SharedArrayBufferwhose contents are a copy of this
SharedArrayBuffer's bytes from
begin, inclusive, up to
end, exclusive. If either
endis negative, it refers to an index from the end of the array, as opposed to from the beginning.
|ECMAScript Shared Memory and Atomics
The definition of 'SharedArrayBuffer' in that specification.
|ECMAScript 2017 Draft (ECMA-262)||Draft|
|Feature||Chrome||Edge||Firefox (Gecko)||Internet Explorer||Opera||Safari|
|Basic support||No support ||No support||46 (46) ||No support||No support||No support|
||No support||No support||52 (52) ||No support||No support||No support|
|SAB in DataView||No support||No support||53 (53) ||No support||No support||No support|
|Feature||Android||Chrome for Android||Firefox Mobile (Gecko)||IE Mobile||Opera Mobile||Safari Mobile|
|Basic support||No support||No support||46.0 (46) ||No support||No support||No support|
||No support||No support||52.0 (52) ||No support||No support||No support|
|SAB in DataView||No support||No support||53.0 (53) ||No support||No support||No support|
 This feature is disabled by a preference setting. In about:config, set
 The implementation is under development and needs these runtime flags: