一、JavaScript的工作者线程

202 阅读2分钟

(一)、 工作者线程的表现

  1. 在原始页面环境之外,一个完全独立的二级子环境。
  2. 这个子环境不能与依赖单线程交互的API(如DOM)互操作。
  3. 可以与父环境并行执行代码。

(二)、工作者线程的类型

规范定义了三种,专用工作者线程、共享工作者线程和服务工作者线程。还有其类型未得到广泛支持或定位于小众应用程序。

  1. 专用工作者线程(DedicatedWorkerGlobalScope)

    1. 又叫工作者线程、Web Worker或Worker。可以让脚本单独创建一个JavaScript线程,以执行委托的任务(只能被创建它的页面使用)
    2. 使用场景:发送大量网络请求、执行文件输入/输出、进行密集计算、处理大量数据,以及实现其他不适合在页面执行线程里做的任务,导致页面响应迟钝的情况。
  2. 共享工作者线程(SharedWorkerGlobalScope)

    1. 与创建它脚本的同源脚本,都可以与它通信(多标签页之间通信)。
  3. 服务工作者线程(ServiceWorkerGlobalScope)

    1. 它的主要用途是拦截、重定向和修改页面发出的请求。
    2. PWA(Progressive Web App)是一种理念,使用多种技术来增强web app的功能,可以让网站的体验变得更好,能够模拟一些原生功能,比如通知推送。在移动端利用标准化框架,让网页应用呈现和原生应用相似的体验。

(三)、三个线程多功能与区别示意图

截屏2021-12-30 18.51.02.png

(四)、工作者线程与线程

  1. 共同点

    1.1. 工作者线程是以实际线程实现的。

    1.2. 工作者线程并行执行。

    1.3. 工作者线程可以共享某些内存。

  2. 区别

2.1. 工作者线程不共享全部内存。

2.2. 工作者线程不一定在同一个进程里。

2.3. 创建工作者线程的开销更大。(工作者线程有自己独立的事件循环、全局对象、事件处理程序和其他JavaScript环境必需的特性)

(五)、代码地址

github.com/KevinBrothe…