Web Worker

Web Worker提供了一个接口,该接口提供了一种单首创建独立线程的方式。而不影响UI线程javascript

最简单的使用css

在js文件中html

1 var myWorker=new Worker("worker.js");
2 myWorker.addEventListener('message',function(e){
3    alert(e.data);
4 })

在worker.js中java

1 var num=0;
2 for(var i=-;i<1000;i++){
3    num++;
4 }
5 postMessage(num);

2个线程之间能够经过postMessage()进行通讯,但传递的类容只能是被序列化的数据,不能传递普通的js对象数组

 新建立的线程和原始线程的区别
1:浏览器中全局对象是Window对象,这个对象能够访问DOM和BOM的所有对象,worker线程只能经过this(self)来访问全局对象。而且他能够访问的对象
是有必定限制的。浏览器

嵌入式WORKERpost

 1 //脚本不会被js解析,由于type是自创的
 2 <script  type="text/js-worker"  id="worker">
 3   var num=0;
 4   for(var i=0;i<100;i++){
 5      num+=i;
 6   }
 7   self.addEventListener('message',function(e){
 8      self.postMessage(e.data+','+num)l
 9   },false);
10 </script>
11 
12 <script type="text/javascript">
13 
14    var code=document.getElementById('worker').textContent;
15    //构建二进制对象,第一个是数组,第二个是对象参数
16    var blob=new Blob([code],{type:"text/javascript"});
17    //window.URL.createObjectURL(blob)用来建立一个简单的网址字符串。
18    var myWorker=new Worker(window.URL.createObjectURL(blob));
19    myWorker.addEventListener('message',function(e){
20       console.log(e.data);
21    },false);
22    myWorker.postMessage('get result');
23 </script>

共享workerthis

前面的都只为主线程服务叫作专用worker,共享worker被同源的多个页面所共享,能够用于多个页面的数据同步,和若干标签共享一个资源的状况url

建立一个共享workerspa

1 var worker=new ShareWorker("worker.js","doSomething")

接受2个参数 url 和给共享worker取的名字,这个名字能够为同一个js文件建立多个worker实例

共享worker的实例

主界面

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>共享worker</title>
     <style type="text/css">
         
     </style>
    <script type="text/javascript">
      
        var out=document.getElementById('output');
        var id=(''+Date.now()).substr(-4,4);
        console.log(id);
        document.getElementById('iam').innerHTML='个人编号是'+id;
        var worker=new SharedWorker('shared-worker.js');
        worker.port.addEventListener('message',function(e){
            output.innerHTML+=e.data;
        },false);
        worker.port.start();
          function sayHI(){
            worker.port.postMessage({'cmd':'hi','msg':'你们好!<br>','id':id});
        }
    </script>
</head>
<body>
    <span id="iam"></span>
    <button onclick="sayHI()">say hi</button>
    <div id="output"></div>
</body>
</html>

shared-worker.js

 1 var ports=[];
 2 function boradcast(msg){
 3     ports.forEach(function(port){
 4         port.postMessage(msg);
 5     })
 6 }
 7 self.onconnect=function(e){
 8     var newport=e.ports[0];
 9     ports.push(newport);
10     newport.onmessage=function(e){
11         if(e.data.cmd=='hi'){
12             boradcast(e.data.id+'说:'+e.data.msg);
13         }
14     }
15 }
相关文章
相关标签/搜索