Our volunteers haven't translated this article into عربي yet. Join us and help get the job done!
You can also read the article in English (US).

The 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 ArrayBuffer, a SharedArrayBuffer cannot become detached.

Syntax

new SharedArrayBuffer(length)

Parameters

length
The size, in bytes, of the array buffer to create.

Return value

A new SharedArrayBuffer object of the specified size. Its contents are initialized to 0.

Description

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 SharedArrayBuffers and 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);

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.

APIs accepting SharedArrayBuffer objects

Constructing is required with new operator

SharedArrayBuffer constructors are required to be constructed with a new operator. Calling a SharedArrayBuffer constructor as a function without new will throw a TypeError.

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

Properties

SharedArrayBuffer.length
The SharedArrayBuffer constructor's length property whose value is 1.
SharedArrayBuffer.prototype
Allows the addition of properties to all SharedArrayBuffer objects.

SharedArrayBuffer prototype object

All SharedArrayBuffer instances inherit from SharedArrayBuffer.prototype.

Properties

SharedArrayBuffer.prototype.constructor
Specifies the function that creates an object's prototype. The initial value is the standard built-in SharedArrayBuffer constructor.
SharedArrayBuffer.prototype.byteLength Read only
The size, in bytes, of the array. This is established when the array is constructed and cannot be changed. Read only.

Methods

SharedArrayBuffer.prototype.slice(begin, end)
Returns a new SharedArrayBuffer whose contents are a copy of this SharedArrayBuffer's bytes from begin, inclusive, up to end, exclusive. If either begin or end is negative, it refers to an index from the end of the array, as opposed to from the beginning.

Specifications

Specification Status Comment
ECMAScript Latest Draft (ECMA-262)
The definition of 'SharedArrayBuffer' in that specification.
Living Standard Initial definition in ES2017.
ECMAScript 2017 (ECMA-262)
The definition of 'SharedArrayBuffer' in that specification.
Standard  

Browser compatibility

FeatureChromeEdgeFirefoxInternet ExplorerOperaSafari
Basic support6016

55

46 — 541

No No10.1
SharedArrayBuffer in DataView6016

55

53 — 542

No No10.1
prototype6016

55

46 — 541

No No10.1
byteLength6016

55

46 — 541

No No10.1
slice6016

55

52 — 543

No No10.1
FeatureAndroid webviewChrome for AndroidEdge mobileFirefox for AndroidIE mobileOpera AndroidiOS Safari
Basic support6060 ?

55

46 — 541

No No No
SharedArrayBuffer in DataView6060 ?

55

53 — 542

No No No
prototype6060 ?

55

46 — 541

No No No
byteLength6060 ?

55

46 — 541

No No No
slice6060 ?

55

52 — 543

No No No

1. From version 46 until version 54 (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.

2. From version 53 until version 54 (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.

3. From version 52 until version 54 (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.

See also

Document Tags and Contributors

 Last updated by: jonco,