赞
踩
js是单线程的,防止同时操作dom元素,造成页面混乱
引入worker多线程,也是不允许同时多线程操作同一个dom元素的
应用场景:
大型数据运算、计时器、异步请求、访问navigator部分属性、js核心对象
局限性:
1.不能跨域加载(可以放到服务器下)
2.worker文件不能访问DOM
worker使用:
主线程文件:在index.html中
var worker = new Worker('worker.js');
worker.postMessage(10);//将复杂计算交给子线程
worker.onmessage = function(e){
console.log(e.data);//接收子线程返回来的数据
}
子线程文件:在worker.js文件
/*
* 响应主线程发过来的数据进行处理
*/
onmessage = function(e){
var num = e.data;//接收从主线程传过来的值
num += 10000;//假设做了一系列酷炫拽高难度计算工作
postMessage(num);//把计算结果传回给主线程
}
index.html运行结果,输出:10010
结束worker:
1.close()在worker.js文件中使用
2.terminate()在worker对象上调用(worker.terminate)
当子线程工作完成,需要断开主线程与子线程之间的连接:
close()方法是由子线程自发断开;而terminate()方法是主线程断开连接
如果子线程在一开始就调用close方法,主线程发送数据,子线程是接收不到的,比如这样:
拒绝小心心
如果主线程使用子线程,用着用着不用了,类似这样
后面传20的操作就不会有了,只会输出10010(10000+10),没有10020(10000+20)了
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。