--- title: SharedArrayBuffer slug: Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer translation_of: Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer ---
{{JSRef}}

Объект SharedArrayBuffer используется для создания разделённого буфера фиксированной длины для хранения примитивных бинарных данных, подобно объекту {{jsxref("ArrayBuffer")}}, но могут быть использованы для создания обзора на разделённую память. В отличие от ArrayBufferSharedArrayBuffer не может быть отсоединён.

Синтаксис

new SharedArrayBuffer(length)

Параметры

length
Размер, в байтах, для создания буферного массива.

Возвращаемое значение

Новый объект SharedArrayBuffer указанной длины. Его содержимое после инициализации равно 0.

Описание

Распределение и разделение память

Для разделения памяти с помощью объекта {{jsxref("SharedArrayBuffer")}} между одним агентом в кластере и другим (агент может быть как основной программой web-страницы, так и одним из web-workers), используются postMessage и structured cloning.

Алгоритм структурированного клонирования принимает SharedArrayBuffers и TypedArrays, отображённый в SharedArrayBuffers. В обоих случаях, объект  SharedArrayBuffer передаётся получателю, результируя в новый, приватный объект SharedArrayBuffer внутри агента-получателя (так же как для {{jsxref("ArrayBuffer")}}). Однако, блок общих данных, на который ссылаются оба объекта SharedArrayBuffer, это один и тот же блок данных, и сторонние эффекты в блоке в одном из агентов в итоге станут заметны в другом агенте.

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

Обновление и синхронизация разделённой памяти с помощью Атомарных операций

Разделённая память может быть создана и изменена одновременно в  workers или основном потоке. В зависимости от системы (ЦПУ, ОС, браузер) может уйти время пока изменения будут распространены по всем контекстам. Для синхронизации необходимы {{jsxref("Атомарные", "атомарные", "", 1)}} операции .

API, принимающие объекты SharedArrayBuffer

Конструкции требуют оператор new

Конструкторы SharedArrayBuffer необходимо вызывать с помощью оператора {{jsxref("Operators/new", "new")}}. Вызов конструктора SharedArrayBuffer как функции без указания new, вызовет ошибку {{jsxref("TypeError")}}.

var sab = SharedArrayBuffer(1024);
// TypeError: вызов встроенного конструктора SharedArrayBuffer
// без new запрещено
var sab = new SharedArrayBuffer(1024);

Свойства

SharedArrayBuffer.length
Длина конструктора SharedArrayBuffer, чьё значение равно 1.
{{jsxref("SharedArrayBuffer.prototype")}}
Позволяет дополнительные свойства для всех объектов SharedArrayBuffer.

SharedArrayBuffer объект prototype

Все экземпляры SharedArrayBuffer наследуются от {{jsxref("SharedArrayBuffer.prototype")}}.

Свойства

{{page('en-US/Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer/prototype','Properties')}}

Методы

{{page('en-US/Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer/prototype','Methods')}}

Спецификации

Specification Status Comment
{{SpecName('ESDraft', '#sec-sharedarraybuffer-objects', 'SharedArrayBuffer')}} {{Spec2('ESDraft')}} Initial definition in ES2017.
{{SpecName('ES8', '#sec-sharedarraybuffer-objects', 'SharedArrayBuffer')}} {{Spec2('ES8')}}  

Поддержка браузерами

{{CompatibilityTable}}

Feature Chrome Edge Firefox (Gecko) Internet Explorer Opera Safari
Basic support {{CompatNo}} [2] {{CompatNo}} {{CompatGeckoDesktop("55")}} [1] {{CompatNo}} {{CompatNo}} {{CompatSafari("10.1")}}
slice() {{CompatNo}} {{CompatNo}} {{CompatGeckoDesktop("52")}} [1] {{CompatNo}} {{CompatNo}} {{CompatSafari("10.1")}}
SAB in DataView {{CompatNo}} {{CompatNo}} {{CompatGeckoDesktop("53")}} [1] {{CompatNo}} {{CompatNo}} {{CompatSafari("10.1")}}
Feature Android Chrome for Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Basic support {{CompatNo}} {{CompatNo}} {{CompatGeckoMobile("55")}} [1] {{CompatNo}} {{CompatNo}} {{CompatSafari("10.1")}}
slice() {{CompatNo}} {{CompatNo}} {{CompatGeckoMobile("52")}} [1] {{CompatNo}} {{CompatNo}} {{CompatSafari("10.1")}}
SAB in DataView {{CompatNo}} {{CompatNo}} {{CompatGeckoMobile("53")}} [1] {{CompatNo}} {{CompatNo}} {{CompatSafari("10.1")}}

[1] Enabled by default in Firefox 55. In Firefox version 46 until version 54, this feature is disabled by a preference setting (in about:config, set javascript.options.shared_memory to true). 

[2] The implementation is under development and needs these runtime flags: --js-flags=--harmony-sharedarraybuffer --enable-blink-feature=SharedArrayBuffer

Смотри также