# WebWorker
Web Worker
是HTML5的新功能,用于实现JS的多线程操作。
但Web Worker子线程完全受主线程控制
,无法操作DOM,所以本质上JS还是单线程的。
它包含两部分:
- Worker对象
- 在主线程中,对 Worker 的引用
- WorkerGlobalScope
- 表示 新创建的Worker的全局对象(也是Worker线程内部使用的对象)
外界:
- 实例化一个worker对象
var worker = new Worker('./my/path/to/async.js')
1
- 发送消息给worker内部
worker.postMessage('Hello')
1
- 注册事件处理程序
worker.onmessage = function(e) {
// ...
worker.terminate() // 关闭 Worker线程
}
1
2
3
4
2
3
4
worker内部
- 注册事件处理程序
// WorkerGlobalScope是一个供Worker使用的全局对象
// 因此postMessage、onmessage看起来像全局函数和全局变量
onmessage = function(e) {
postMessage(123)
}
1
2
3
4
5
2
3
4
5
# WebWorker 会用在哪些场景?
- 完成轮询,以便第一时间得知状态改变
- 长时间读取文件
其他 →