diff options
author | Peter Bengtsson <mail@peterbe.com> | 2020-12-08 14:40:17 -0500 |
---|---|---|
committer | Peter Bengtsson <mail@peterbe.com> | 2020-12-08 14:40:17 -0500 |
commit | 33058f2b292b3a581333bdfb21b8f671898c5060 (patch) | |
tree | 51c3e392513ec574331b2d3f85c394445ea803c6 /files/zh-cn/web/javascript/reference/global_objects/sharedarraybuffer | |
parent | 8b66d724f7caf0157093fb09cfec8fbd0c6ad50a (diff) | |
download | translated-content-33058f2b292b3a581333bdfb21b8f671898c5060.tar.gz translated-content-33058f2b292b3a581333bdfb21b8f671898c5060.tar.bz2 translated-content-33058f2b292b3a581333bdfb21b8f671898c5060.zip |
initial commit
Diffstat (limited to 'files/zh-cn/web/javascript/reference/global_objects/sharedarraybuffer')
4 files changed, 335 insertions, 0 deletions
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 +--- +<div>{{JSRef}}</div> + +<p> <code><strong>byteLength</strong></code> 访问器属性表示以字节为单位的一个{{jsxref("SharedArrayBuffer")}}的长度。</p> + +<h2 id="语法">语法</h2> + +<pre class="syntaxbox"><var>sab</var>.byteLength</pre> + +<h2 id="描述">描述</h2> + +<p><code>byteLength</code>属性是一个访问者属性,其set访问者函数为 <code>undefined</code>,这意味着您只能读取此属性。 该值在构造共享数组时建立,并且无法更改。</p> + +<h2 id="例子">例子</h2> + +<pre class="brush:js">var sab = new SharedArrayBuffer(1024); +sab.byteLength; // 1024 +</pre> + +<h2 id="规范">规范</h2> + +<table class="standard-table"> + <tbody> + <tr> + <th scope="col">Specification</th> + <th scope="col">Status</th> + <th scope="col">Comment</th> + </tr> + <tr> + <td>{{SpecName('ESDraft', '#sec-get-sharedarraybuffer.prototype.bytelength', 'SharedArrayBuffer.prototype.byteLength')}}</td> + <td>{{Spec2('ESDraft')}}</td> + <td>Initial definition in ES2017.</td> + </tr> + </tbody> +</table> + +<h2 id="浏览器兼容性">浏览器兼容性</h2> + + + +<p>{{Compat("javascript.builtins.SharedArrayBuffer.byteLength")}}</p> + +<h2 id="相关链接">相关链接</h2> + +<ul> + <li>{{jsxref("SharedArrayBuffer")}}</li> +</ul> 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 +--- +<div>{{JSRef}}</div> + +<p><strong><code>SharedArrayBuffer</code></strong> 对象用来表示一个通用的,固定长度的原始二进制数据缓冲区,类似于 {{jsxref("ArrayBuffer")}} 对象,它们都可以用来在共享内存(shared memory)上创建视图。与 <code>ArrayBuffer</code> 不同的是,<code><strong>SharedArrayBuffer</strong></code> 不能被分离。</p> + +<div class="blockIndicator note"> +<p>请注意,作为对<a href="https://meltdownattack.com/">Spectre</a>的响应,所有主流浏览器均默认于2018年1月5日禁用<code>SharedArrayBuffer</code>。 Chrome在启用了网站隔离功能的平台上的<a href="https://bugs.chromium.org/p/chromium/issues/detail?id=821270">v67中重新启用</a>了该功能,以防止出现Spectre风格的漏洞。</p> +</div> + +<p>{{EmbedInteractiveExample("pages/js/sharedarraybuffer-constructor.html")}}</p> + +<div class="hidden"> +<p>The source for this interactive example is stored in a GitHub repository. If you'd like to contribute to the interactive examples project, please clone <a href="https://github.com/mdn/interactive-examples">https://github.com/mdn/interactive-examples</a> and send us a pull request.</p> +</div> + +<h2 id="语法">语法</h2> + +<pre class="syntaxbox">new SharedArrayBuffer(length) +</pre> + +<h3 id="参数">参数</h3> + +<dl> + <dt><code>length</code></dt> + <dd>所创建的数组缓冲区的大小,以字节(byte)为单位。</dd> +</dl> + +<h3 id="返回值">返回值</h3> + +<p>一个大小指定的新 <code>SharedArrayBuffer</code> 对象。其内容被初始化为 0。</p> + +<h2 id="描述">描述</h2> + +<h3 id="分配及共享内存">分配及共享内存</h3> + +<p>为了将一个{{jsxref("SharedArrayBuffer")}} 对象从一个用户代理共享到另一个用户代理(另一个页面的主进程或者当前页面的一个 <code>worker</code> )从而实现共享内存,我们需要运用 <code><a href="/en-US/docs/Web/API/Worker/postMessage">postMessage</a></code> 和结构化克隆算法( <a href="/en-US/docs/Web/API/Web_Workers_API/Structured_clone_algorithm">structured cloning</a> )。</p> + +<p>结构化克隆算法接收被映射到一个新的 <code>SharedArrayBuffers</code> 对象上的 <code>SharedArrayBuffers</code> 对象与 <code>TypedArrays</code> 对象。在这两种映射下,这个新的 <code>SharedArrayBuffer</code> 对象会被传递到目标用户代理的接收函数上,导致在目标用户代理产生了一个新的私有 <code>SharedArrayBuffer</code> 对象(正如 {{jsxref("ArrayBuffer")}} 一样)。然而,这两个 <code>SharedArrayBuffer</code> 对象指向的共享数据块其实是同一个,并且在某一代理中的一个块的副作用将最终导致另一个代理具有可见性。</p> + +<pre class="brush: js">let sab = new SharedArrayBuffer(1024); +worker.postMessage(sab); +</pre> + +<h3 id="通过原子操作更新及同步来共享内存">通过原子操作更新及同步来共享内存</h3> + +<p>共享内存能被同时创建和更新于工作者线程或主线程。依赖于系统(CPU,操作系统,浏览器),变化传递给所有上下文环境需要一段时间。需要通过 {{jsxref("Atomics", "atomic", "", 1)}} 操作来进行同步。</p> + +<h3 id="接受_SharedArrayBuffer_对象的API"><font face="Open Sans, Arial, sans-serif">接受 </font><code>SharedArrayBuffer</code> 对象的API</h3> + +<ul> + <li>{{domxref("WebGLRenderingContext.bufferData()")}}</li> + <li>{{domxref("WebGLRenderingContext.bufferSubData()")}}</li> + <li>{{domxref("WebGL2RenderingContext.getBufferSubData()")}}</li> +</ul> + +<h3 id="需要_new_运算符来构造">需要 <code>new</code> 运算符来构造</h3> + +<p><code>SharedArrayBuffer</code> 需要 {{jsxref("Operators/new", "new")}} 运算符来构造一个构造函数. 作为函数来调用一个 <code>SharedArrayBuffer</code> 构造函数时,如果不用 <code>new</code> 运算符,将会抛出一个 {{jsxref("TypeError")}} 异常。</p> + +<pre class="brush: js example-bad">var sab = SharedArrayBuffer(1024); +// TypeError: calling a builtin SharedArrayBuffer constructor +// 必须用 new 来构造</pre> + +<pre class="brush: js example-good">var sab = new SharedArrayBuffer(1024);</pre> + +<h2 id="属性">属性</h2> + +<dl> + <dt><code>SharedArrayBuffer.length</code></dt> + <dd><code>SharedArrayBuffer</code> 构造函数的 length 属性值为1。 </dd> + <dt>{{jsxref("SharedArrayBuffer.prototype")}}</dt> + <dd>允许所有 <code>SharedArrayBuffer</code> 对象的附加属性。</dd> +</dl> + +<h2 id="SharedArrayBuffer_原型对象"><code>SharedArrayBuffer</code> 原型对象</h2> + +<p>所有 <code>SharedArrayBuffer</code> 实例继承自 {{jsxref("SharedArrayBuffer.prototype")}}。</p> + +<h3 id="属性_2">属性</h3> + +<p>{{page('zh-CN/Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer/prototype','Properties')}}</p> + +<h3 id="方法">方法</h3> + +<p>{{page('zh-CN/Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer/prototype','Methods')}}</p> + +<h2 id="规范">规范</h2> + +<table class="standard-table"> + <tbody> + <tr> + <th scope="col">规范</th> + <th scope="col">状态</th> + <th scope="col">备注</th> + </tr> + <tr> + <td>{{SpecName('ESDraft', '#sec-sharedarraybuffer-objects', 'SharedArrayBuffer')}}</td> + <td>{{Spec2('ESDraft')}}</td> + <td>Initial definition in ES2017.</td> + </tr> + <tr> + <td>{{SpecName('ES8', '#sec-sharedarraybuffer-objects', 'SharedArrayBuffer')}}</td> + <td>{{Spec2('ES8')}}</td> + <td></td> + </tr> + </tbody> +</table> + +<h2 id="浏览器兼容性">浏览器兼容性</h2> + +<div class="hidden"> +<p>The compatibility table on this page is generated from structured data. If you'd like to contribute to the data, please check out <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> and send us a pull request.</p> +</div> + +<p>{{Compat("javascript.builtins.SharedArrayBuffer")}}</p> + +<h2 id="相关链接">相关链接</h2> + +<ul> + <li>{{jsxref("Atomics")}}</li> + <li>{{jsxref("ArrayBuffer")}}</li> + <li><a href="/en-US/docs/Web/JavaScript/Typed_arrays">JavaScript typed arrays</a></li> + <li><a href="/en-US/docs/Web/API/Web_Workers_API">Web Workers</a></li> + <li><a href="https://github.com/lars-t-hansen/parlib-simple">parlib-simple </a>– a simple library providing synchronization and work distribution abstractions.</li> + <li><a href="https://github.com/tc39/ecmascript_sharedmem/blob/master/TUTORIAL.md">Shared Memory – a brief tutorial</a></li> + <li> + <p><a href="https://hacks.mozilla.org/2016/05/a-taste-of-javascripts-new-parallel-primitives/">A Taste of JavaScript’s New Parallel Primitives – Mozilla Hacks</a></p> + </li> +</ul> 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 +--- +<div>{{JSRef}}</div> + +<p><strong><code>SharedArrayBuffer.prototype</code></strong> 属性表示 {{jsxref("SharedArrayBuffer")}} 对象的原型。</p> + +<div>{{js_property_attributes(0,0,0)}}</div> + +<h2 id="描述">描述</h2> + +<p><code>SharedArrayBuffer</code>实例继承自<code>SharedArrayBuffer.prototype</code>。 与所有构造函数一样,您可以更改构造函数的原型对象以对所有<code>SharedArrayBuffer</code>实例进行更改。</p> + +<h2 id="属性">属性</h2> + +<dl> + <dt>SharedArrayBuffer.prototype.constructor</dt> + <dd>指定创建对象原型的函数。 初始值为标准的内置<code>SharedArrayBuffer</code>构造函数。</dd> + <dt>{{jsxref("SharedArrayBuffer.prototype.byteLength")}} {{readonlyInline}}</dt> + <dd>数组的大小(以字节为单位)。 这是在数组初始化时建立的,并且无法被更改。<strong> 只读</strong>。</dd> +</dl> + +<h2 id="方法">方法</h2> + +<dl> + <dt>{{jsxref("SharedArrayBuffer.slice", "SharedArrayBuffer.prototype.slice(begin, end)")}}</dt> + <dd>返回一个新的<code>SharedArrayBuffer</code>,其内容是此<code>SharedArrayBuffer</code>字节从<code>beigin</code>开始(包括<code>begin</code>)到<code>end</code>结束(不包括<code>end</code>)的副本。 如果<code>begin</code>或<code>end</code>为负,则它是指数组末尾的索引,而不是开头的索引。</dd> +</dl> + +<h2 id="规范">规范</h2> + +<table class="standard-table"> + <tbody> + <tr> + <th scope="col">Specification</th> + <th scope="col">Status</th> + <th scope="col">Comment</th> + </tr> + <tr> + <td>{{SpecName('ESDraft', '#sec-sharedarraybuffer.prototype', 'SharedArrayBuffer.prototype')}}</td> + <td>{{Spec2('ESDraft')}}</td> + <td>Initial definition in ES2017.</td> + </tr> + </tbody> +</table> + +<h2 id="浏览器兼容性">浏览器兼容性</h2> + + + +<p>{{Compat("javascript.builtins.SharedArrayBuffer.prototype")}}</p> + +<h2 id="相关链接">相关链接</h2> + +<ul> + <li>{{jsxref("SharedArrayBuffer")}}</li> +</ul> 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 +--- +<div>{{JSRef}}</div> + +<p><code><strong>SharedArrayBuffer.prototype.slice()</strong></code> 方法返回一个新的{{jsxref("SharedArrayBuffer")}} 副本,其内容是<code>该SharedArrayBuffer</code>的字节从<code>begin</code>开始(包含<code>begin</code>),直到<code>end</code>结束(不包含<code>end</code>)。如果<code>begin</code>或<code>end</code>是负的,它指的是从数组末尾开始的索引。此方法与 {{jsxref("Array.prototype.slice()")}} 具有相同的算法。</p> + +<p>{{EmbedInteractiveExample("pages/js/sharedarraybuffer-slice.html")}}</p> + +<h2 id="语法">语法</h2> + +<pre class="syntaxbox"><var>sab</var>.slice() +<var>sab</var>.slice(begin) +<var>sab</var>.slice(begin, end)</pre> + +<h3 id="参数">参数</h3> + +<dl> + <dt><code>begin</code> {{optional_inline}}</dt> + <dd>从零开始的索引,从该索引开始提取。</dd> + <dd>可以使用一个负索引,表示从序列末尾开始的偏移量。 <code>slice(-2)</code>提取序列中的最后两个元素。</dd> + <dd>If <code>begin</code> is undefined, <code>slice</code> begins from index <code>0</code>.如果<code>begin</code>为undefined,<code>slice</code>则从索引为<code>0</code>处开始。</dd> + <dt><code>end</code> {{optional_inline}}</dt> + <dd>从零开始的索引,在此索引<em>之前</em>终止提取。 <code>slice</code> 执行提取到索引为<code>end</code>的位置(不包含<code>end</code>)。</dd> + <dd>例如,<code>slice(1,4)</code>提取第二个元素到第四个元素(索引为1、2和3的元素)。</dd> + <dd>可以使用一个负索引,表示从序列末尾开始的偏移量。 <code>slice(2,-1)</code>提取序列中从第三个元素开始,到倒数第二个元素结束的全部元素。</dd> + <dd>如果省略<code>end</code>,则<code>slice</code>一直提取到序列的末尾(<code>sab.byteLength)。</code></dd> +</dl> + +<h3 id="返回值">返回值</h3> + +<p>一个包含被提取出的元素的新 {{jsxref("SharedArrayBuffer")}} 。</p> + +<h2 id="例子">例子</h2> + +<pre class="brush:js">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 } +</pre> + +<h2 id="规范">规范</h2> + +<table class="standard-table"> + <tbody> + <tr> + <th scope="col">Specification</th> + <th scope="col">Status</th> + <th scope="col">Comment</th> + </tr> + <tr> + <td>{{SpecName('ESDraft', '#sec-sharedarraybuffer.prototype.slice', 'SharedArrayBuffer.prototype.slice')}}</td> + <td>{{Spec2('ESDraft')}}</td> + <td>Initial definition in ES2017.</td> + </tr> + </tbody> +</table> + +<h2 id="浏览器兼容性">浏览器兼容性</h2> + + + +<p>{{Compat("javascript.builtins.SharedArrayBuffer.slice")}}</p> + +<h2 id="相关链接">相关链接</h2> + +<ul> + <li>{{jsxref("SharedArrayBuffer")}}</li> + <li>{{jsxref("Array.prototype.slice()")}}</li> +</ul> |