JavaScript Web Worker
什么是 Web Worker?
Web Worker 是 HTML5 引入的一项技术,它允许 JavaScript 代码在主线程之外的后台线程中运行。在传统的 JavaScript 执行模型中,所有代码都在单一的主线程中运行,这意味着长时间运行的任务会阻塞用户界面,导致页面响应变慢。Web Worker 提供了一种在后台执行复杂计算而不影响页面性能的方法。
备注
JavaScript 传统上是单线程语言,这意味着一次只能执行一个操作。Web Worker 是突破这一限制的官方解决方案。
Web Worker 的类型
JavaScript 提供了几种类型的 Web Worker:
- 专用 Worker (Dedicated Worker) - 仅能被创建它的脚本访问
- 共享 Worker (Shared Worker) - 可被多个脚本共享,即使这些脚本来自不同的窗口、iframe 或工作线程
- Service Worker - 充当 代理服务器的特殊类型 Worker,主要用于离线缓存和推送通知
本文将主要关注专用 Worker,这是最常用和最基本的 Worker 类型。
Web Worker 的限制
在开始使用 Web Worker 之前,了解它的限制很重要:
- Worker 无法访问 DOM(无法直接操作页面元素)
- Worker 无法访问
window
、document
对象 - Worker 无法访问父页面的全局变量和函数
- Worker 有自己独立的全局上下文(
WorkerGlobalScope
) - 主线程和 Worker 之间只能通过消息传递进行通信
创建和使用 Web Worker
基本使用步骤
- 创建一个单独的 JavaScript 文件作为 Worker 脚本
- 在主脚本中使用
Worker()
构造函数创建 Worker 实例 - 使用
postMessage()
方法从主线程向 Worker 发送消息 - 在 Worker 中使用
onmessage
事件处理接收到的消息 - 使用
postMessage()
从 Worker 向主线程发送处理结果 - 在主线程中使用
onmessage
事件处理 Worker 返回的结果