Movatterモバイル変換


[0]ホーム

URL:


MDN Web Docs

Эта страница была переведена с английского языка силами сообщества. Вы тоже можете внести свой вклад, присоединившись к русскоязычному сообществу MDN Web Docs.

SharedArrayBuffer

BaselineWidely available *

Объект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