共享工作人员共享变量

时间:2015-02-24 04:58:25

标签: javascript html5 web-worker

我一直在阅读有关共享工作者上下文的一些文档。很多人指出共享工作者不共享变量,这意味着他们不能使用彼此的变量。 但是,我的实验再次证明了这一点。

父工作者

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

有人可以解释一下吗?

2 个答案:

答案 0 :(得分:3)

我相信SharedWorker会创建一个可以从多个父级访问的工作者,因此它不共享变量,因为它只有一个SharedWorker进程共享父级

答案 1 :(得分:0)

工作人员拥有无法共享变量的独立javascript 上下文ports变量是SharedWorker的javascript API 的一部分,而不是它的javascript 上下文

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