Shared worker do share variables

拈花ヽ惹草 提交于 2019-12-08 01:12:43

问题


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?


回答1:


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




回答2:


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!