我一直在阅读有关共享工作者上下文的一些文档。很多人指出共享工作者不共享变量,这意味着他们不能使用彼此的变量。 但是,我的实验再次证明了这一点。
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
。
有人可以解释一下吗?
答案 0 :(得分:3)
我相信SharedWorker会创建一个可以从多个父级访问的工作者,因此它不共享变量,因为它只有一个SharedWorker进程共享父级
答案 1 :(得分:0)
工作人员拥有无法共享变量的独立javascript 上下文。
ports
变量是SharedWorker的javascript API 的一部分,而不是它的javascript 上下文。
请注意,所有工作人员都可以通过消息传递传递变量。
DedicatedWorkers可以使用Transferrables 通过引用传递,但SharedWorkers只能按值传递,因为它们使用异步序列化缓冲区(ports
)来进行实际的消息传递。 / p>