当前位置:首页 > web worker 浅学

web worker 浅学

发布于 2018-04-08 阅读 519 次 Javascript HTML5
Web Workers 是 HTML5 提供的一个javascript多线程解决方案,我们可以将一些大计算量的代码交由web Worker运行而不冻结用户界面。它独立于其他脚本,不会影响页面的性能。您可以继续做任何愿意做的事情:点击、选取内容等等,而此时 web worker 在后台运行。 1、Web Worker的创建是在主线程当中通过传入文件的url来实现的。如下所示: var webworker=new Worker('my_task.js'); 创建webworker对象的时候需要判断浏览器是否支持 **if(typeof Worker == ‘undefind’)**则提示错误; 返回的webworker对象,该对象可以完成与worker线程的通信,主要通过**webworker.postMessage(data)**向线程发送消息,通过**webworker.onmessage=function(evt){}**来监听worker线程发送到主线程的消息,通过**webworker.onerror=function(evt){}**来监听线程中的错误消息,通过**webworker.terminate()**来告诉worker线程立即终止执行。 2、web worker线程是无法操作Dom对象的,所以像prompt、alert、console等都是无法在web worker线程中使用的,所以调试不太处理。但是可以将调试发送给主线程,主线程通过web worker线程发出的请求作出处理。 3、用于创建webworker线程的js文件必须和当前页面遵循同源策略,也就是说不能跨域请求js文件;另外,线程之间的消息传递是不能有Function对象的,就是说不能够传递函数,在safari浏览器中只能传递数字/字符串等基本值(连Object都不行)。并且所有线程之间的数据并不是常规的引用方式,都是一份独立的拷贝。因此一般情况下,我们会将传递的参数转化为字符串进行传递,可以通过JSON.stringify()和JSON.parse()来处理。 **woker.html** Web Worker模拟聊天
**worker.js** onmessage = function(e){ postMessage("收到:"+e.data); }