共享工作者确实共享变量
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
)来进行实际的消息传递。
我一直在阅读一些关于共享工作环境的文档。他们中的很多人指出 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
)来进行实际的消息传递。