Web worker总结

Web worker有以下两种类型:

1. Dedicated worker (专用)

  属于单页面共享,目前除了IE之外各浏览器支持比较广泛;

// 页面中执行
var
work1 = window.work1 = new Worker("worker_1.js"); work1.onmessage = function (e) {   console.log("Receive message:", e.data, e); }; work1.postMessage("data to worker.");
// worker_1.js: 单独线程中执行
onmessage = function (e) {
    console.log("Receive from main:", e.data, e);
};

var count = 0;
setInterval(function () {
    postMessage("Message data" + count++);
}, 5000);

 

2. SharedWorker

  多页面共享,可以当做多页面之间交互的一种解决方案;当前Firefox 29以上才支持;

// 页面中执行
if
(!window.SharedWorker){ alert("Your browser does not support SharedWorker!"); return; } var work2 = window.work2 = new SharedWorker("worker_2.js"); work2.port.onmessage = function (e) { console.log("Receive:", e.data, e); }; work2.port.start(); //work2.port.postMessage("data to worker.");
// worker_2.js: 单独线程中执行
var
userCount = 0; var portList = []; onconnect = function (e) { var port = e.ports[0]; portList.push(port); port.postMessage("Accept new user with count:" + userCount); port.onmessage = function (e) {
    // 向所有接受者发送
    for(var i=0; i<portList.length; i++){       portList[i].postMessage("Send accepted msg:" + portList.length + i + e.data);     }   }; };

 

  它们的scope|context并不是window,均继承自WorkerGlobalScope,前者为 DedicatedWorkerGlobalScope,后者为 SharedWorkerGlobalScope;在Chrome 38版本上后者不支持console的输出,目前MDN也没有相应的文档;

 

 

参考资料:

1. Dedicated worker    https://developer.mozilla.org/en-US/docs/Web/API/Worker

2. SharedWorker       https://developer.mozilla.org/en-US/docs/Web/API/SharedWorker

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。