【发布时间】:2017-11-28 09:56:04
【问题描述】:
在 ECMAScript 2017 的功能中有Shared memory and atomics。 我尝试在 Google Chrome 59.0.3071.109 中对其进行测试(启用了实验性 SharedArrayBuffer 标志)。 当我尝试在简单的 Worker 中发布 SharedArrayBuffer 时,它是有效的。但是当我尝试在 SharedWorker 中发布 SharedArrayBuffer 时,在 onmessage 事件处理程序的事件参数中我得到 event.data 为空。为什么会这样?这是我的代码示例:
index.html:
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Web Workers</title>
<script src="main.js"></script>
</head>
<body>
<button onclick="post()">Post</button>
<button onclick="get()">Get</button>
</body>
</html>
main.js:
var worker = new SharedWorker('worker.js');
var buffer = new SharedArrayBuffer(Int32Array.BYTES_PER_ELEMENT);
new Int32Array(buffer)[0] = 12;
function post() {
worker.port.postMessage({buffer});
}
function get() {
console.log(new Int32Array(buffer)[0]);
}
worker.js:
self.onconnect = function (e) {
var [port] = e.ports;
port.onmessage = function (e) {
console.log(e.data);// null
};
};
谢谢。
【问题讨论】:
-
不确定如何获得该结果,但据我所知,Chrome 59 尚不支持
SharedArrayBuffer。 -
有 chrome://flags/#shared-array-buffer。我会重复一遍,一切都与简单的工人一起工作。
-
kangax.github.io/compat-table/es2016plus 这里也标明了。 [17] 该功能必须通过“在 JavaScript 中实验性启用 SharedArrayBuffer 支持”来启用。在 about:flags 下设置
-
所以这个功能仍然落后于标志是有原因的。它还不稳定。在这种情况下,我认为 Chrome 上的当前实现存在错误。
-
好的。也许。问一个问题时,我试图理解这个错误或功能。谢谢你的版本。
标签: javascript web web-worker ecmascript-2017