共享工作者确实共享变量

Shared worker do share variables

我一直在阅读一些关于共享工作环境的文档。他们中的很多人指出 shared worker 不共享变量,这意味着它们不能相互使用变量。 然而,我的实验反对。

Parent 工人

var port = new SharedWorker('worker.js').port;
port.start();
port.postMessage('Hello');

工人

var ports = [];
onconnect = function(e){
    var port = e.ports[0];
    port.start();
    ports.push(port);
    console.log('Number of tabs: '+ports.length);
};

ports.length在我打开更多标签时不断增加,这意味着ports在工作人员之间共享。

有人可以解释一下吗?

我相信 SharedWorker 创建了一个从多个父进程访问的单个 worker,因此它不共享变量,因为它是一个共享父进程的 SharedWorker 进程

工人有独立的javascript上下文,不能共享变量。 ports 变量是 SharedWorker 的 javascript API 的一部分,而不是 javascript context.

请注意,所有工作人员都可以通过消息传递传递 变量。 DedicatedWorkers 可以使用 Transferrables 按引用传递,但 SharedWorkers 只能按值传递,因为它们使用异步序列化缓冲区(ports)来进行实际的消息传递。