JavaScript参考手册
SharedArrayBuffer
SharedArrayBuffer
SharedArrayBuffer
对象用来表示一个通用的,固定长度的原始二进制数据缓冲区,类似于 ArrayBuffer
对象。对象,但它们可以用来在共享内存上创建视图。与 ArrayBuffer
不同的是,SharedArrayBuffer
不能被分离。
语法
new SharedArrayBuffer(length)
参数
length
所创建的数组缓冲区的大小,以字节(byte)为单位。
返回值
一个大小指定的新 SharedArrayBuffer
对象。其内容被初始化为 0。
描述
分配及共享内存
为了将一个SharedArrayBuffer
对象从一个用户代理共享到另一个用户代理(另一个页面的主进程或者当前页面的一个 worker
)从而实现共享内存,我们需要运用 postMessage
和结构化克隆算法( structured cloning )。
结构化克隆算法接收被映射到一个新的 SharedArrayBuffers
对象上的 SharedArrayBuffers
对象与 TypedArrays
对象。在这两种映射下,这个新的 SharedArrayBuffer
对象会被传递到目标用户代理的接收函数上,导致在目标用户代理产生了一个新的私有 SharedArrayBuffer
对象(正如ArrayBuffer
一样)。然而,这两个 SharedArrayBuffer
对象指向的共享数据块其实是同一个,并且在某一代理中的一个块的副作用将最终导致另一个代理具有可见性。
var sab = new SharedArrayBuffer(1024);
worker.postMessage(sab);
通过原子操作更新及同步来共享内存
共享内存能被同时创建和更新于工作者线程或主线程。依赖于系统(CPU,操作系统,浏览器),变化传递给环境需要一段时间。需要通过atomic操作来进行同步。
接受 SharedArrayBuffer
对象的API
WebGLRenderingContext.bufferData()
WebGLRenderingContext.bufferSubData()
WebGL2RenderingContext.getBufferSubData()
需要 new
运算符来构造
SharedArrayBuffer
需要new
运算符来构造一个构造函数. 作为函数来调用一个 SharedArrayBuffer
构造函数时,如果不用new
运算符,将会抛出一个 TypeError
异常。
var sab = SharedArrayBuffer(1024);
// TypeError: calling a builtin SharedArrayBuffer constructor
// without new is forbidden
var sab = new SharedArrayBuffer(1024);
属性
SharedArrayBuffer.lengthSharedArrayBuffer
构造函数的 length 属性值为1。
SharedArrayBuffer.prototype
允许所有 SharedArrayBuffer
对象的附加属性。
SharedArrayBuffer
原型对象
所有 SharedArrayBuffer
实例继承自SharedArrayBuffer.prototype
。
属性
SharedArrayBuffer.prototype.constructor
指定创建对象原型的函数。初始值为标准内置SharedArrayBuffer
SharedArrayBuffer.prototype.byteLength
数组的大小 (以字节为单位)。这是在构造数组并不能更改时建立的。只读。
方法
SharedArrayBuffer.prototype.slice(begin, end)
返回一个新的 SharedArrayBuffer, 其内容是此 SharedArrayBuffer 的副本。如果begin
或end
是负数, 则引用数组末尾的索引, 而不是从开头开始。
规范
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 |
|
浏览器兼容性
Feature |
Chrome |
Edge |
Firefox (Gecko) |
Internet Explorer |
Opera |
Safari |
---|---|---|---|---|---|---|
Basic support |
60 2 |
16 |
55 (55) 1 |
No support |
No support |
10.1 |
slice() |
60 2 |
16 |
52 (52) 1 |
No support |
No support |
10.1 |
SAB in DataView |
60 |
16 |
53 (53) 1 |
No support |
No support |
10.1 |
Feature |
Android |
Chrome for Android |
Firefox Mobile (Gecko) |
IE Mobile |
Opera Mobile |
Safari Mobile |
---|---|---|---|---|---|---|
Basic support |
No support |
No support |
55.0 (55) 1 |
No support |
No support |
10.1 |
slice() |
No support |
No support |
52.0 (52) 1 |
No support |
No support |
10.1 |
SAB in DataView |
No support |
No support |
53.0 (53) 1 |
No support |
No support |
10.1 |
SharedArrayBuffer | ||
---|---|---|
sharedArrayBuffer.byteLength | 详细 | |
SharedArrayBuffer.prototype | 详细 | |
sharedArrayBuffer.slice | 详细 |

JavaScript 是一种高级编程语言,通过解释执行,是一门动态类型,面向对象(基于原型)的解释型语言。它已经由ECMA(欧洲电脑制造商协会)通过 ECMAScript 实现语言的标准化。它被世界上的绝大多数网站所使用,也被世界主流浏览器( Chrome、IE、FireFox、Safari、Opera )支持。JavaScript 是一门基于原型、函数先行的语言,是一门多范式的语言,它支持面向对象编程,命令式编程,以及函数式编程。它提供语法来操控文本、数组、日期以及正则表达式等,不支持 I/O,比如网络