JavaScript是单线程的,就不能像多线程一样把工作委托给独立的线程。
工作者线程的价值就是允许把主线程的工作转嫁到独立的实体,而不会改变现有的单线程模型。
JavaScript环境实际上是运行在托管操作系统中的虚拟环境。在浏览器中打开一个页面,就会分配一个自己的环境,这样每一个页面都有自己的内存、事件循环、DOM等等。每一个页面相当于一个沙盒,不会干扰其他的页面。
使用工作者线程,浏览器可以在原始页面环境之外再分配一个完全独立的二级子环境,这个子环境不能和依赖单线程交互的API互操作。
Web工作者线程规范定义了三种主要的工作者线程:专用工作者线程、共享工作者线程和服务工作者线程。
专用工作者线程
也就是Web Worker或者Worker,可以让脚本单独创建一个JavaScript线程,可以执行委托任务。只能被创建它的页面使用。
这样的线程可以和父页面交换信息、发送网络请求、执行文件输入、输出,进行密集计算、处理大量数据,完成一些不合适在页面执行线程里面做的任务。
可以把专用工作者线程称为“后台脚本”,创建专用工作者线程:
工作者线程脚本文件只能从和父页面相同的额源加载,也就是不能跨域加载,否则加载文件报错。