Web Worker作用
Web Worker 的目的就是为了给 Javascript 创建多线程的环境,允许主线程创建多线程,将一些任务交给别的线程执行。在主线程运行的同时,其他多线程在后台运行,两者互不干扰。使用 postMessage() 可以将数据在主线程和子线程之间进行传输。这样的好处是,一些计算量大的任务,被子线程负担了,不会影响主线程(通常负责UI交互)的加载,页面就会很流畅,不会被阻塞。
子线程一旦创建成功,就会始终运行,不会被主线程上的活动(比如用户点击按钮、提交表单)打断。导致子线程比较耗费资源,不应该过度使用,而且一旦使用完毕,就应该关闭。
Worker 使用
1、在主线程中,新建一个子线程
var work=new Worker("./a.js");
2、主线程可以使用postMessage(),将数据传递给子线程
work.postMessage("aaa");
3、主线程中添加子线程侦听事件message,用来接收子线程返回的数据
work.addEventListener("message",messageHandler);
function messageHandler(e){
console.log(e);//打印结果如下
work.terminate();//任务完成后,关闭子线程
}
4、创建子线程文件,添加侦听事件message,用来接收主线程返回的数据
this.addEventListener("message",messageHandler);
function messageHandler(e){
console.log(e.data);
}
5、子线程中使用postMessage(),将数据传递给主线程
var i=0;
getCount();
function getSum(){
i++;
postMessage(i);
this.close();//执行完成后,关闭自身
}
setTimeout(getSum,2000);