Web工人?
众所周知,javascript是单线程语言(为什么)。web worker可以在后台开启浏览器除GUI渲染线程、JS引擎线程、事件处理线程、定时器线程以及HTTP请求线程的新的线程,新的线程在后台进行相应的逻辑处理后再传回到主线程。这对于包含大量可能影响页面加载的计算代码的意义非常大。
专用worker实现方法
要点:
-
worker的处理逻辑在一个专用的js编辑,数据的传递
postmessage
和接收onmessage
使用方法类似方法 -
worker的实例化,例
iWorker
,使用new Worker('上述.js') -
主线程数据的传递
postmessage
和接收onmessage
都得挂载到worker的实例化对象iWorker
-
参数是一个数组,数据的获取方法e.data[0]...
如何立即关闭worker?
主线程中使用iWorker.terminate()
,或者在worker.js中调用方法close()
注意点
web worker仍然是比较新的API,所以不管是主线程还是worker.js中都最好检查Worker是否定义。如下:
if(Worker){...}else{...}
20-03-12------------
SharedWorker今天尝试的时候碰到一个坑,在worker.js
中不要加上述的if-else验证,否则worker无效。
参考链接
https://developer.mozilla.org/zh-CN/docs/Web/API/Web_Workers_API/Using_web_workers
网友评论