版权声明: https://blog.csdn.net/zy21131437/article/details/82348758
Web Worker是H5中一个重量级的功能,但是,因为其常驻内存,会影响性能,不推荐大量使用,虽然不推荐使用,但是不能掩盖其强大的功能
web worker可以在独立的线程中运行,这样可以在worker中执行一些耗时操作,而不会阻塞应用的主线程
局限性
- web worker中无法操作dom元素
- 某些window对象中的方法和属性无法使用
另外,注意:主线程和worker线程之间的数据交互,传递的是数据的副本,而不是共享数据
web worker分为:
- Dedicated worker:专用worker,只能被首次生成的脚本使用
- shared worker:共享woker,可以被多个脚本使用
- service worker:服务worker
- chrome worker:在firewoker中使用
- auduo worker:专业音频worker
web worker语法
虽然分为多个worker,但是语法是一样的
var myWorker = new Worker(aURL,option)
aURL:执行脚本的地址,需要符合同源策略
options:可选,包含一些属性,用来设置要创建的worker
{
type:woker类型,值为classic或module,默认为classic
credentials:worker的认证类型,值为omit,same-orgin,include,如果没有指定,默认为omit
name:worker的名称
}
目前规范中有这几个属性,但是浏览器基本都没有支持
worker的属性和方法
属性 | 说明 |
onerror | 发生错误时触发 |
onmessage | 收到消息时触发 |
onmessageerror | 收到的消息无法反序列化时触发 |
方法 | 说明 |
postMessage() | 发送消息给worker线程 |
terminate() | 立即终止woker |
SharedWorker
SharedWorker可以被多个脚本使用,即使这些脚本正在被不同的window,iframe或者worker访问