JavaScript运行在单线程环境中,加入Worker后即变成了多线程(一个Worker对应一个线程?),但是Woker线程不能访问浏览器的资源,只有主线程才可以访问浏览器的资源。所以在web中对setTimeout/setInterval、ajax和dom事件的异步处理一般依赖事件循环来实现。
1.Web Worker是什么
Web Worker是HTML5标准的一部分,这一规范定义了一套API,它允许一段JavaScript程序运行在主线程之外的另外一个线程中。Web Worker规范中定义了两类工作线程,分别是专用线程Dedicated Worker(只能为一个页面所使用),共享线程Shared Worker(可以被多个页面所共享)。下面将的是专用线程。
2.API案例
main.js
var worker=new Worker('task.js');//通过调用构造函数,传入worker脚本文件名,新建一个worker对象
worker.postMessage({id:1,msg:'hello world'});//调用该方法与新创建的工作线程通信,这里传入了一个json对象
worker.onmessage=function(message)//定义了worker对象的onmessage事件,当worker线程返回数据时,onmessage回调函数执行
{
var data=message.data;//数据封装在message参数的data属性中
console.log(JSON.stringify(data));
worker.terminate();//调用worker的terminate()方法可以终止worker线程的运行
};
worker.on