js的webworker简单示例

前端的同学应该都知道js是单线程,异步IO的,但是其实他也是可以实现多线程的,只不过还是受制于主线程,不能够有一些操作dom的行为,说白了其实就是比较消耗cpu的计算量比较大,话不多说,下面我们可以直接看代码:
worker.html

<!DOCTYPE html>  
<html>  
<head>  
<meta charset="UTF-8">  
<title>Insert title here</title>  
</head>  
<body>  
    <!-- web worker是运行在后台的javascript,不会影响页面的性能 -->  
    <p>计数:<output id="result"></output></p>  
    <button onclick="startWorker()">开始worker</button>  
    <button onclick="endWorker()">停止worker</button>    
    <div id='ceshi' onclick="ceshi()">点击我不会阻塞代码</div>
    <br><br>  
    <script type="text/javascript">  
       var w;         
       function startWorker(){  
           if(typeof(Worker)!="undefined"){//浏览器支持web worker  
               if(typeof(w)=="undefined"){//w是未定义的,还没有开始计数        
                   w = new Worker("webworker.js");//创建一个Worker对象,利用Worker的构造函数  
               }  
               //onmessage是Worker对象的properties  
               w.onmessage = function(event){//事件处理函数,用来处理后端的web worker传递过来的消息  
                   document.getElementById("result").innerHTML=event.data;  
               };  
           }else{  
               document.getElementById("result").innerHTML="sorry,your browser does not support web workers";  
           }  
       }    
       function endWorker(){  
          w.terminate();//利用Worker对象的terminated方法,终止  
          w=undefined;  
       } 
       function ceshi(){
           console.log(555)
       }
    </script>  
</body>  
</html>  
webworker.js
var i = 0;  

function timeCount(){  
  i = i + 1;  
  postMessage(i);//postMessage是Worker对象的方法,用于向html页面回传一段消息  
  setTimeout("timeCount()",500);//定时任务  
}  
timeCount();//加1计数,每500毫秒调用一次  

这里有一点要注意,new Worker(“webworker.js”) 里面的参数为另一个文件的路径,因为chrome是不支持直接在本地获取资源的,所以一定要在本地起一个服务,要不然会报跨域的问题,这个当时困扰我了好久啊!!!!!!!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值