Movatterモバイル変換


[0]ホーム

URL:


  1. Веб-технологии для разработчиков
  2. JavaScript
  3. Справочник по JavaScript
  4. Стандартные встроенные объекты
  5. SharedArrayBuffer

This page was translated from English by the community.Learn more and join the MDN Web Docs community.

View in EnglishAlways switch to English

SharedArrayBuffer

Baseline Widely available *

This feature is well established and works across many devices and browser versions. It’s been available across browsers since ⁨декабрь 2021 г.⁩.

* Some parts of this feature may have varying levels of support.

ОбъектSharedArrayBuffer подобен ArrayBuffer, то есть это буфер фиксированной длины, использующийся для хранения любых бинарных данных. Главное отличиеSharedArrayBuffer отArrayBuffer заключается в том, что он используется для создания разделяемой области памяти. В отличие отArrayBufferSharedArrayBuffer не может быть откреплён от соответствующей ему области памяти.

Описание

Выделение и совместное использование памяти

Для совместного использования памяти с помощью объектаSharedArrayBuffer между одним агентом в кластере и другим (агентом может быть как основная программа страницы сайта, так и один из её веб-воркеров) используютсяpostMessage иалгоритм структурированного клонирования.

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

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

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

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

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

Требования безопасности

Разделяемая память и таймеры высокого разрешения былиотключены в начале 2018 года из-за атакиSpectre. В 2020 году был стандартизирован новый, безопасный подход, чтобы включить разделяемую память обратно.

Основное требование — ваш документ должен находиться вбезопасном контексте.

Для документов верхнего уровня нужно установить два заголовка, чтобы изолировать ваш сайт от других источников:

  • Cross-Origin-Opener-Policy со значением `same-origin`` (защищает ваш источник от атаки)
  • Cross-Origin-Embedder-Policy со значениемrequire-corp илиcredentialless (защищает жертв от вашего источника)

Чтобы проверить, что изоляция от других источников прошла успешно, протестируйте свойствоcrossOriginIsolated, доступное для контекстов окна и воркера:

js
const myWorker = new Worker("worker.js");if (crossOriginIsolated) {  const buffer = new SharedArrayBuffer(16);  myWorker.postMessage(buffer);} else {  const buffer = new ArrayBuffer(16);  myWorker.postMessage(buffer);}

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

Specification
ECMAScript® 2026 Language Specification
# sec-sharedarraybuffer-objects

Совместимость с браузерами

Смотрите также

Help improve MDN

Learn how to contribute

This page was last modified on byMDN contributors.


[8]ページ先頭

©2009-2025 Movatter.jp