Web Worker 使用教程

web Worker 是运行在后台的javascript,是html5提供的一个多线程解决方案。不会影响页面的性能。

一、背景

js语言采用的是单线程模式,即:所有任务只能在一个线程上完成,一次只能做一件事,前面的任务没做完,后面的任务只能等着。随着电脑计算能力的增强,尤其是多核CPU的出现,单线程带来很大的不便,无法充分发挥计算机的计算能力。

二、作用

Web Workers 是 HTML5 提供的一个javascript多线程解决方案,我们可以将一些大计算量的代码交由web Worker运行而不冻结用户界面。它独立于其他脚本,不会影响页面的性能。您可以继续做任何愿意做的事情:点击、选取内容等等,而此时 web worker 在后台运行。

三、使用

1、创建:web Workers 的创建是在主线程中通过传入文件的url来实现的
var w = new Worker(“deme_worler.js”);
返回的worker对象w可以与Worker线程进行通信
web主线程通过

1、w.postMessage()向线程发送消息
2、w.onmessage=function(evt){}来监听worker线程发送到主线程的消息
3、w.οnerrοr=function(evt){}来监听线程中的错误消息
4、w.terminate()来告诉worker线程立即终止执行

worker新线程通过

1.通过postMessage( data ) 方法来向主线程发送数据。
2.绑定onmessage=function(event){}方法来接收主线程发送过来的数据。

<!doctype html>
<html>
 <head>
 	<meta charset="utf-8"/>
 	<style type="text/css">
 		li{
 			list-style: none;
 			font-family: "微软雅黑";
 		}
 	</style>
 </head>
 <body>
 	<button id="send">开始聊天</button>
 	<ul id="message">

 	</ul>
 	<script type="text/javascript">
 	if(typeof(Worker)!=="undefined"){
 		var myWorker = new Worker("my_task.js");
 		myWorker.onmessage = function (oEvent) {//接收线程发过来的消息
 		  console.log("Worker said : " + oEvent.data);
 		};
 		document.getElementById("send").onclick=function(){
 			var msg=prompt("说点什么")||"你好!";
 			myWorker.postMessage(msg);//向另外的线程发送消息
 			var li=document.createElement("li");
 			li.innerHTML="他说:"+msg;
 			document.getElementById("message").appendChild(li);
 			myWorker.onmessage=function(data){
 				var li1=document.createElement("li");
 				li1.innerHTML="她回复:"+data.data.msg+"  "+data.data.time;
 				document.getElementById("message").appendChild(li1);
 			}
 		}
 	}else{
 		alert("不支持web worker ");
 	}
 	</script>
 </body>
</html>

同源的web worker线程my_task.js:

onmessage = function (oEvent) {//对主线程回传回来的消息进行处理
  postMessage( {
  		time:new Date(),
  		msg:oEvent.data+"[自动回复] "
  	});
};
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值