浏览器 Web Workers
浏览器中把计算任务移出主线程的工作者线程模型。
#type / concept
#status / growing
#resource / javascript
#resource / web
#platform / browser
[!info] related notes
- 所属 MOC: javascript-in-browser-moc, javascript-moc
- 上位主题: javascript-in-browser
- 上位背景: javascript中的进程线程协程, js事件循环
- Node 对比: worker-threads
- 关联主题: window-object, browser-client-storage
浏览器 Web Workers
Web Worker 让浏览器在页面主线程之外再启动一个独立脚本执行环境,用来处理不适合放在主线程里的计算任务。
它解决什么问题
- 避免 CPU 密集型任务阻塞页面交互
- 把解析、加密、压缩、批量计算等工作移出主线程
- 让主线程更专注于 DOM、交互与渲染
关键边界
- Worker 是独立执行环境
- 可以并行执行脚本
- 不能直接操作 DOM
- 默认通过消息传递与主线程通信
常见类型
- Dedicated Worker: 由单个页面创建和使用
- Shared Worker: 可被多个同源上下文共享
- Service Worker: 主要处理请求拦截、缓存与离线能力
运行时特点
- Worker 里没有
window - 全局入口通常是
self - 可使用
postMessage()与主线程交换数据 - 需要共享内存时,可继续看
SharedArrayBuffer与Atomics
什么时候不用它
- 只是等待网络返回时,
Promise/async通常已经够用 - 需要直接访问 DOM 时,还是要回到主线程
放回主题图里看
- 看浏览器并发模型:javascript中的进程线程协程
- 看浏览器运行时全景:javascript-in-browser