I've been reading some documents about shared worker context. Lots of them point out shared worker do not share variables, which means they can not use each other variables. However, my experiment againsts that.
Parent worker
var port = new SharedWorker('worker.js').port;
port.start();
port.postMessage('Hello');
Worker
var ports = [];
onconnect = function(e){
var port = e.ports[0];
port.start();
ports.push(port);
console.log('Number of tabs: '+ports.length);
};
ports.length
keeps increasing when I open more tabs, which means ports
is shared between workers.
Could anybody please explain this?
I believe SharedWorker creates a single worker which is accessed from multiple parents, so its not sharing variables since its a single SharedWorker process sharing parents
Workers have independent javascript contexts that cannot share variables.
The ports
variable is part of the SharedWorker's javascript API, not it's javascript context.
Note that all workers can pass variables via messaging.
DedicatedWorkers can pass by reference using Transferrables, but SharedWorkers can only pass by value, since they use async serialized buffers (ports
) to do the actual messaging.
来源:https://stackoverflow.com/questions/28688439/shared-worker-do-share-variables