为什么会有web worker
1.在header标签加载js时,因为浏览器解析会从上往下解析的,如果加载的js过多时,页面被阻塞的情况可能性就越大。
2.当需要下载多个js文件时,需要多次建立http连接,因为建立http连接时间开销比较大,所以一个大的js文件好过几个小的js文件。
3.js也具有计算功能,但当js在计算时,则不能及时响应。
web worker提供的功能:
对后台计算提供完全隔离计算方式:不可访问dom api、不可访问window object、不可访问document object、强隔离保证并行结果无误
web worker启动:
定义worker对象:var w = new Worker("calc.js"); //不能访问跨站的js,可访问同域名下的js
worker会占用比非worker模式更多的内存,当计算机硬件条件较好时,运行效率较高。
web worker通信:
message事件通信:addEventListener('message',function(evt)){……
postMessage()用于向worker发消息:w.postMessage(imgData);
数据会被格式化为json格式
每次发送都是源对象的copy,对象大,性能降低明显
worker可访问的接口:
setTimeout()/clearTimeout()
setInterval()/clearInterval()
importScripts()引入其他js文件
可以读取url
可以发送XMLHttpRequest
shared worker可以共享worker数据
参考:http://v.youku.com/v_show/id_XMzc4OTczMTE2.html