Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/463.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript SharedArrayBuffer和SharedWorker_Javascript_Web_Web Worker_Ecmascript 2017 - Fatal编程技术网

Javascript SharedArrayBuffer和SharedWorker

Javascript SharedArrayBuffer和SharedWorker,javascript,web,web-worker,ecmascript-2017,Javascript,Web,Web Worker,Ecmascript 2017,在ECMAScript 2017的功能中,有以下几个方面。 我尝试在Google Chrome 59.0.3071.109中测试它(实验性SharedArrayBuffer标志已启用)。 当我尝试在SimpleWorker中使用PostShareDarrayBuffer时,它是有效的。但当我尝试在SharedWorker中发布SharedArrayBuffer时,在onmessage事件处理程序的事件参数中,我得到的event.data为null。为什么会这样?下面是我的代码示例: index.

在ECMAScript 2017的功能中,有以下几个方面。 我尝试在Google Chrome 59.0.3071.109中测试它(实验性SharedArrayBuffer标志已启用)。 当我尝试在SimpleWorker中使用PostShareDarrayBuffer时,它是有效的。但当我尝试在SharedWorker中发布SharedArrayBuffer时,在onmessage事件处理程序的事件参数中,我得到的event.data为null。为什么会这样?下面是我的代码示例:

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>
worker.js:

self.onconnect = function (e) {
    var [port] = e.ports;

    port.onmessage = function (e) {
        console.log(e.data);// null
    };
};
谢谢。

根据Chromium文档:共享工作人员已退出流程。

它运行在与文档进程(包含JS主线程)不同的另一个系统进程上

操作系统进程拒绝来自其他进程的内存访问。


SharedArraybuffer
按共享(访问)内存工作。因此,
SharedArraybuffer
通过JS主线程创建(访问)(文档进程)无法通过
Shared Worker访问(进程外)

我不确定你怎么能得到这个结果,但据我所知,
SharedArrayBuffer
在Chrome59上仍然不受支持chrome://flags/#shared-数组缓冲区。我要重申,一切都是与简单的工人。这里也指出了这一点。[17] 该功能必须通过“JavaScript中实验性启用的SharedArrayBuffer支持”来启用。在about:flagso下设置该功能仍处于标志后面是有原因的。现在还不稳定。在这种情况下,我认为Chrome.Ok上当前的实现存在一个bug。可能是。当我提问时,我试图理解这个bug或特性。谢谢你的版本。
self.onconnect = function (e) {
    var [port] = e.ports;

    port.onmessage = function (e) {
        console.log(e.data);// null
    };
};