工作者线程简介及用途细节笔记摘要
参考资料
- <u>《Javascript高级程序设计第4版》第27章</u>
工作者线程与线程
- 工作者线程是以实际线程实现的
- 工作者线程并行执行
- 工作者线程可以共享某些内存
- 工作者线程不共享全部内存
- 工作者线程不一定在同一个进程里
- 创建工作者线程的开销更大
<u>工作者线程相对比较重,不建议大量使用。例如,对一张 400 万像素的图片,为每个像素 都启动一个工作者线程是不合适的。通常,工作者线程应该是长期运行的,启动成本比较高, 每个实例占用的内存也比较大</u>
工作者线程的类型
专用工作者线程(WebWorker):是一种实用的工具,可以让脚本单独创建一个 JavaScript 线程,以执行委托的任务。专用工作者线程,顾名思义,只能被创建它的页面使用。
共享工作者线程(SharedWorker):共享工作者线程与专用工作者线程非常相似。主要区别是共享工作者线程可以被多个不同的上下文使用,包括不同的页面。任何与创建共享工作者线程的脚本同源的脚本,都可以向共享工作者线程发送消息或从中接收消息。
服务工作者线程(ServiceWorkers):服务工作者线程与专用工作者线程和共享工作者线程截然不同。它的主要用途是拦截、重定向和修改页面发出的请求,充当网络请求的仲裁者的角色。
WorkerGlobalScope
WorkerGlobalScope 属性和方法:
- navigator:返回与工作者线程关联的 WorkerNavigator。
- self:返回 WorkerGlobalScope 对象。
- location:返回与工作者线程关联的 WorkerLocation。
- performance:返回(只包含特定属性和方法的)Performance 对象。
- console:返回与工作者线程关联的 Console 对象;对 API 没有限制。
- caches:返回与工作者线程关联的 CacheStorage 对象;对 API 没有限制。
- indexedDB:返回 IDBFactory 对象。
- isSecureContext:返回布尔值,表示工作者线程上下文是否安全。
- origin:返回 WorkerGlobalScope 的源。 类似地,self 对象上暴露的一些方法也是 window 上方法的子集。这些 self 上的方法也与 window 上对应的方法操作一样。
- atob()
- btoa()
- clearInterval()
- clearTimeout()
- createImageBitmap()
- fetch()
- setInterval()
- setTimeout() WorkerGlobalScope 还增加了新的全局方法 importScripts(),只在工作者线程内可用。
WorkerGlobalScope 的子类:
- 专用工作者线程使用 DedicatedWorkerGlobalScope。
- 共享工作者线程使用 SharedWorkerGlobalScope。
- 服务工作者线程使用 ServiceWorkerGlobalScope。