JavaScript

JavaScript 知识量:26 - 101 - 483

26.1 工作者线程简介><

什么是工作者线程- 26.1.1 -

JavaScript工作者线程是一种在浏览器后台运行的独立线程,它能够处理长时间运行的任务,而不会阻塞主线程。JavaScript的工作者线程与Web Workers是相似的,但是它能够直接与主线程交互,不需要通过消息传递进行通信。

工作者线程的创建和销毁都是异步的,它们不会直接影响到主线程的运行。工作者线程可以访问主线程中的全局变量和函数,但是它们不能直接修改它们。工作者线程之间是独立的,它们不会共享任何数据。

JavaScript的工作者线程可以使用Web Workers API来实现,例如使用postMessage()方法向主线程发送消息,使用onmessage事件处理程序接收消息。同时,工作者线程也可以使用SharedArrayBuffer来共享内存。

使用工作者线程可以有效地处理后台任务,例如在处理大量数据或执行计算密集型任务时,可以使用工作者线程来分担一部分计算任务,从而减轻主线程的负担,提高页面的响应速度和性能。

工作者线程的类型- 26.1.2 -

Web Workers 规范定义了三种主要的工作者线程:专用工作者线程(Dedicated Worker)、共享工作者线程(Shared Worker)和服务工作者线程(Service Worker)。

  • 专用工作者线程:这种线程由网页中的脚本创建,只能被创建它的页面使用。它与主页面交换信息、发送网络请求、执行文件输入/输出,进行密集计算、处理大量数据,完成一些不合适在页面执行线程里面做的任务。专用工作者线程通常被用于执行长时间运行的任务,而不会影响页面的性能。

  • 共享工作者线程:这种线程允许多个主线程共享同一个工作线程,从而减少资源的浪费。它们通常用于处理那些需要共享数据或资源的任务。

  • 服务工作者线程:主要用途是「拦截」、「重定向」和「修改页面发出的请求」,充当「网络请求」的仲裁者的角色。它们被设计为在后台处理网络请求和缓存管理。

WorkerGlobalScope- 26.1.3 -

window对象可以向运行在其中的脚本暴露各种全局变量。在工作者线程内部,没有window的概念。这里的全局对象是WorkerGlobalScope的实例。

WorkerGlobalScope是Web Workers API的接口,表示任何工作线程范围的接口。每个WorkerGlobalScope都有自己的事件循环。它继承自EventTarget,所以也拥有addEventListener、removeEventListener、dispatchEvent这三个方法。在Worker的全局作用域中,没有浏览上下文,此范围包含通常由Window对象传达的信息,在这种情况下,是事件处理程序、控制台或关联的WorkerNavigator对象。