# WebWorker

Web WorkerHTML5的新功能,用于实现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

worker内部

  • 注册事件处理程序
// WorkerGlobalScope是一个供Worker使用的全局对象
// 因此postMessage、onmessage看起来像全局函数和全局变量
onmessage = function(e) {
    postMessage(123)
}
1
2
3
4
5

# WebWorker 会用在哪些场景?

  • 完成轮询,以便第一时间得知状态改变
  • 长时间读取文件
更新时间: 4/13/2020, 9:47:04 PM