From 33058f2b292b3a581333bdfb21b8f671898c5060 Mon Sep 17 00:00:00 2001 From: Peter Bengtsson Date: Tue, 8 Dec 2020 14:40:17 -0500 Subject: initial commit --- .../sharedarraybuffer/bytelength/index.html | 53 ++++++++ .../global_objects/sharedarraybuffer/index.html | 144 +++++++++++++++++++++ .../sharedarraybuffer/prototype/index.html | 62 +++++++++ .../sharedarraybuffer/slice/index.html | 76 +++++++++++ 4 files changed, 335 insertions(+) create mode 100644 files/zh-cn/web/javascript/reference/global_objects/sharedarraybuffer/bytelength/index.html create mode 100644 files/zh-cn/web/javascript/reference/global_objects/sharedarraybuffer/index.html create mode 100644 files/zh-cn/web/javascript/reference/global_objects/sharedarraybuffer/prototype/index.html create mode 100644 files/zh-cn/web/javascript/reference/global_objects/sharedarraybuffer/slice/index.html (limited to 'files/zh-cn/web/javascript/reference/global_objects/sharedarraybuffer') diff --git a/files/zh-cn/web/javascript/reference/global_objects/sharedarraybuffer/bytelength/index.html b/files/zh-cn/web/javascript/reference/global_objects/sharedarraybuffer/bytelength/index.html new file mode 100644 index 0000000000..a558623014 --- /dev/null +++ b/files/zh-cn/web/javascript/reference/global_objects/sharedarraybuffer/bytelength/index.html @@ -0,0 +1,53 @@ +--- +title: SharedArrayBuffer.prototype.byteLength +slug: Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer/byteLength +tags: + - SharedArrayBuffer +translation_of: Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer/byteLength +--- +
{{JSRef}}
+ +

 byteLength 访问器属性表示以字节为单位的一个{{jsxref("SharedArrayBuffer")}}的长度。

+ +

语法

+ +
sab.byteLength
+ +

描述

+ +

byteLength属性是一个访问者属性,其set访问者函数为 undefined,这意味着您只能读取此属性。 该值在构造共享数组时建立,并且无法更改。

+ +

例子

+ +
var sab = new SharedArrayBuffer(1024);
+sab.byteLength; // 1024
+
+ +

规范

+ + + + + + + + + + + + + + +
SpecificationStatusComment
{{SpecName('ESDraft', '#sec-get-sharedarraybuffer.prototype.bytelength', 'SharedArrayBuffer.prototype.byteLength')}}{{Spec2('ESDraft')}}Initial definition in ES2017.
+ +

浏览器兼容性

+ + + +

{{Compat("javascript.builtins.SharedArrayBuffer.byteLength")}}

+ +

相关链接

+ + diff --git a/files/zh-cn/web/javascript/reference/global_objects/sharedarraybuffer/index.html b/files/zh-cn/web/javascript/reference/global_objects/sharedarraybuffer/index.html new file mode 100644 index 0000000000..93b5740def --- /dev/null +++ b/files/zh-cn/web/javascript/reference/global_objects/sharedarraybuffer/index.html @@ -0,0 +1,144 @@ +--- +title: SharedArrayBuffer +slug: Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer +tags: + - ArrayBuffer + - Service Worker + - Shared Memory + - SharedArrayBuffer + - TypedArrays + - Web Worker + - Worker + - 共享内存 + - 实验的 + - 构造函数 +translation_of: Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer +--- +
{{JSRef}}
+ +

SharedArrayBuffer 对象用来表示一个通用的,固定长度的原始二进制数据缓冲区,类似于 {{jsxref("ArrayBuffer")}} 对象,它们都可以用来在共享内存(shared memory)上创建视图。与 ArrayBuffer 不同的是,SharedArrayBuffer 不能被分离。

+ +
+

请注意,作为对Spectre的响应,所有主流浏览器均默认于2018年1月5日禁用SharedArrayBuffer。 Chrome在启用了网站隔离功能的平台上的v67中重新启用了该功能,以防止出现Spectre风格的漏洞。

+
+ +

{{EmbedInteractiveExample("pages/js/sharedarraybuffer-constructor.html")}}

+ + + +

语法

+ +
new SharedArrayBuffer(length)
+
+ +

参数

+ +
+
length
+
所创建的数组缓冲区的大小,以字节(byte)为单位。
+
+ +

返回值

+ +

一个大小指定的新 SharedArrayBuffer 对象。其内容被初始化为 0。

+ +

描述

+ +

分配及共享内存

+ +

为了将一个{{jsxref("SharedArrayBuffer")}} 对象从一个用户代理共享到另一个用户代理(另一个页面的主进程或者当前页面的一个 worker )从而实现共享内存,我们需要运用 postMessage 和结构化克隆算法( structured cloning )。

+ +

结构化克隆算法接收被映射到一个新的 SharedArrayBuffers 对象上的 SharedArrayBuffers 对象与 TypedArrays 对象。在这两种映射下,这个新的 SharedArrayBuffer 对象会被传递到目标用户代理的接收函数上,导致在目标用户代理产生了一个新的私有 SharedArrayBuffer 对象(正如 {{jsxref("ArrayBuffer")}} 一样)。然而,这两个 SharedArrayBuffer 对象指向的共享数据块其实是同一个,并且在某一代理中的一个块的副作用将最终导致另一个代理具有可见性。

+ +
let sab = new SharedArrayBuffer(1024);
+worker.postMessage(sab);
+
+ +

通过原子操作更新及同步来共享内存

+ +

共享内存能被同时创建和更新于工作者线程或主线程。依赖于系统(CPU,操作系统,浏览器),变化传递给所有上下文环境需要一段时间。需要通过 {{jsxref("Atomics", "atomic", "", 1)}} 操作来进行同步。

+ +

接受 SharedArrayBuffer 对象的API

+ + + +

需要 new 运算符来构造

+ +

SharedArrayBuffer 需要 {{jsxref("Operators/new", "new")}} 运算符来构造一个构造函数. 作为函数来调用一个 SharedArrayBuffer 构造函数时,如果不用 new 运算符,将会抛出一个 {{jsxref("TypeError")}} 异常。

+ +
var sab = SharedArrayBuffer(1024);
+// TypeError: calling a builtin SharedArrayBuffer constructor
+// 必须用 new 来构造
+ +
var sab = new SharedArrayBuffer(1024);
+ +

属性

+ +
+
SharedArrayBuffer.length
+
SharedArrayBuffer 构造函数的 length 属性值为1。 
+
{{jsxref("SharedArrayBuffer.prototype")}}
+
允许所有 SharedArrayBuffer 对象的附加属性。
+
+ +

SharedArrayBuffer 原型对象

+ +

所有 SharedArrayBuffer 实例继承自 {{jsxref("SharedArrayBuffer.prototype")}}。

+ +

属性

+ +

{{page('zh-CN/Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer/prototype','Properties')}}

+ +

方法

+ +

{{page('zh-CN/Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer/prototype','Methods')}}

+ +

规范

+ + + + + + + + + + + + + + + + + + + +
规范状态备注
{{SpecName('ESDraft', '#sec-sharedarraybuffer-objects', 'SharedArrayBuffer')}}{{Spec2('ESDraft')}}Initial definition in ES2017.
{{SpecName('ES8', '#sec-sharedarraybuffer-objects', 'SharedArrayBuffer')}}{{Spec2('ES8')}}
+ +

浏览器兼容性

+ + + +

{{Compat("javascript.builtins.SharedArrayBuffer")}}

+ +

相关链接

+ + diff --git a/files/zh-cn/web/javascript/reference/global_objects/sharedarraybuffer/prototype/index.html b/files/zh-cn/web/javascript/reference/global_objects/sharedarraybuffer/prototype/index.html new file mode 100644 index 0000000000..ab4f881dff --- /dev/null +++ b/files/zh-cn/web/javascript/reference/global_objects/sharedarraybuffer/prototype/index.html @@ -0,0 +1,62 @@ +--- +title: SharedArrayBuffer.prototype +slug: Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer/prototype +tags: + - Prototype + - SharedArrayBuffer +translation_of: Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer +--- +
{{JSRef}}
+ +

SharedArrayBuffer.prototype  属性表示 {{jsxref("SharedArrayBuffer")}}  对象的原型。

+ +
{{js_property_attributes(0,0,0)}}
+ +

描述

+ +

SharedArrayBuffer实例继承自SharedArrayBuffer.prototype。 与所有构造函数一样,您可以更改构造函数的原型对象以对所有SharedArrayBuffer实例进行更改。

+ +

属性

+ +
+
SharedArrayBuffer.prototype.constructor
+
指定创建对象原型的函数。 初始值为标准的内置SharedArrayBuffer构造函数。
+
{{jsxref("SharedArrayBuffer.prototype.byteLength")}} {{readonlyInline}}
+
数组的大小(以字节为单位)。 这是在数组初始化时建立的,并且无法被更改。 只读
+
+ +

方法

+ +
+
{{jsxref("SharedArrayBuffer.slice", "SharedArrayBuffer.prototype.slice(begin, end)")}}
+
返回一个新的SharedArrayBuffer,其内容是此SharedArrayBuffer字节从beigin开始(包括begin)到end结束(不包括end)的副本。 如果beginend为负,则它是指数组末尾的索引,而不是开头的索引。
+
+ +

规范

+ + + + + + + + + + + + + + +
SpecificationStatusComment
{{SpecName('ESDraft', '#sec-sharedarraybuffer.prototype', 'SharedArrayBuffer.prototype')}}{{Spec2('ESDraft')}}Initial definition in ES2017.
+ +

浏览器兼容性

+ + + +

{{Compat("javascript.builtins.SharedArrayBuffer.prototype")}}

+ +

相关链接

+ + diff --git a/files/zh-cn/web/javascript/reference/global_objects/sharedarraybuffer/slice/index.html b/files/zh-cn/web/javascript/reference/global_objects/sharedarraybuffer/slice/index.html new file mode 100644 index 0000000000..a13b9885f3 --- /dev/null +++ b/files/zh-cn/web/javascript/reference/global_objects/sharedarraybuffer/slice/index.html @@ -0,0 +1,76 @@ +--- +title: SharedArrayBuffer.prototype.slice() +slug: Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer/slice +tags: + - SharedArrayBuffer + - slice +translation_of: Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer/slice +--- +
{{JSRef}}
+ +

SharedArrayBuffer.prototype.slice() 方法返回一个新的{{jsxref("SharedArrayBuffer")}} 副本,其内容是该SharedArrayBuffer的字节从begin开始(包含begin),直到end结束(不包含end)。如果beginend是负的,它指的是从数组末尾开始的索引。此方法与 {{jsxref("Array.prototype.slice()")}} 具有相同的算法。

+ +

{{EmbedInteractiveExample("pages/js/sharedarraybuffer-slice.html")}}

+ +

语法

+ +
sab.slice()
+sab.slice(begin)
+sab.slice(begin, end)
+ +

参数

+ +
+
begin {{optional_inline}}
+
从零开始的索引,从该索引开始提取。
+
可以使用一个负索引,表示从序列末尾开始的偏移量。 slice(-2)提取序列中的最后两个元素。
+
If begin is undefined, slice begins from index 0.如果begin为undefined,slice则从索引为0处开始。
+
end {{optional_inline}}
+
从零开始的索引,在此索引之前终止提取。 slice 执行提取到索引为end的位置(不包含end)。
+
例如,slice(1,4)提取第二个元素到第四个元素(索引为1、2和3的元素)。
+
可以使用一个负索引,表示从序列末尾开始的偏移量。 slice(2,-1)提取序列中从第三个元素开始,到倒数第二个元素结束的全部元素。
+
如果省略end,则slice一直提取到序列的末尾(sab.byteLength)。
+
+ +

返回值

+ +

一个包含被提取出的元素的新 {{jsxref("SharedArrayBuffer")}} 。

+ +

例子

+ +
var sab = new SharedArrayBuffer(1024);
+sab.slice();    // SharedArrayBuffer { byteLength: 1024 }
+sab.slice(2);   // SharedArrayBuffer { byteLength: 1022 }
+sab.slice(-2);  // SharedArrayBuffer { byteLength: 2 }
+sab.slice(0, 1); // SharedArrayBuffer { byteLength: 1 }
+
+ +

规范

+ + + + + + + + + + + + + + +
SpecificationStatusComment
{{SpecName('ESDraft', '#sec-sharedarraybuffer.prototype.slice', 'SharedArrayBuffer.prototype.slice')}}{{Spec2('ESDraft')}}Initial definition in ES2017.
+ +

浏览器兼容性

+ + + +

{{Compat("javascript.builtins.SharedArrayBuffer.slice")}}

+ +

相关链接

+ + -- cgit v1.2.3-54-g00ecf