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,比如网络
加载中,请稍侯......