SharedArrayBuffer

Объект с бинарными данными фиксированной длины для разделяемой области памяти.

Время чтения: меньше 5 мин

Это незавершённая статья. Вы можете помочь её закончить! Почитайте о том, как контрибьютить в Доку.

Кратко

Скопировано

Объект, который содержит буфер фиксированной длины с бинарными данными. Используется для доступа к разделяемой памяти и не может быть откреплён от неё, в отличие от ArrayBuffer. Является частью типизированного массива TypedArray.

Типизированные массивы упрощают работу с тяжёлыми данными, например, видео, аудио и анимациями. Их часто используют с различными API — WebGL, Canvas 2D, XMLHttpRequest2 и так далее.

Пример

Скопировано
        
          
          const sab = new SharedArrayBuffer(1024)worker.postMessage(sab)
          const sab = new SharedArrayBuffer(1024)
worker.postMessage(sab)

        
        
          
        
      

Как пишется

Скопировано

Всегда используйте оператор new для создания SharedArrayBuffer. В скобках указывают размер буфера в байтах. В качестве второго значения можно указать дополнительные свойства. Например, максимальный размер, до которого может увеличиться SharedArrayBuffer.

        
          
          const buffer = new SharedArrayBuffer(8, { maxByteLength: 16 })buffer.grow(12)
          const buffer = new SharedArrayBuffer(8, { maxByteLength: 16 })

buffer.grow(12)

        
        
          
        
      

Так как SharedArrayBuffer может работать сразу с несколькими тредами в памяти, его используют для Service Worker. В этом случае SharedArrayBuffer используют вместе с методом postMessage()и алгоритмами структурированного клонирования.

Из-за рисков, связанных с информационной безопасностью, к SharedArrayBuffer не всегда стоит предоставлять глобальный доступ. Чтобы максимально обезопасить данные на сайте или в приложении, не забывайте про CORS (Cross-origin Resource Sharing, совместное использование ресурсов между разными источниками).

Свойства

Скопировано
  • byteLength — размер буфера в байтах.
  • constructor — создаёт экземпляр объекта.
  • growable — увеличивается или нет длина буфера. Возвращает true или false.
  • maxByteLength — максимальный размер, до которого может увеличиться SharedArrayBuffer.

Методы

Скопировано
  • .grow() — расширяет размеры объекта SharedArrayBuffer в байтах до установленного значения.
  • .slice() — возвращает копию SharedArrayBuffer с таким же количеством байтов, как оригинальный объект.

Как понять

Скопировано

Буфер — пространство в памяти, где хранятся бинарные данные. Разделяемая память (shared memory) означает, что для чтения и записи информации из буфера обращаются не к ядру, а к отдельным сегментам памяти. Про память подробнее узнаете из статьи «Как устроена память».