带你了解Web Worker — 语法篇

476 阅读2分钟

Web Worker 语法相关

虽说 Web Worker 的上下文和 window 是不同的,但是除了不能在 Worker (子线程)中操作 DOM 元素和 使用 window 对象的某些方法和属性之外,其实可以在 Worker 中运行任何 JavaScript 代码。

你可以在这里查看对应两种不同上下文有哪些属性和方法。本篇暂完。

所有 Worker 的上下文 (WorkGlobalScope)

该作用域是后续专项 Worker 作用域实现的接口,意思就是这个作用域里有的属性和方法后续的两个作用域也同样拥有。

标准属性

这里列举常用属性,以及属性作用。 navigatorlocation :这两个属性和 window 下对应的对象的子集。当然还有我们一定会用到的 console属性,此类方法都只是可读属性。

标准方法

close方法关闭当前 Worker。 importScript 可以在 Worker 的作用域中引用其他的脚本。 当然还存在从别处实现的方法,常用的有:setInterval clearInterval setTimeout clearTimeout fetch

Dedicated Worker 的上下文(DedicatedWorkerGlobalScope)

标准属性

含有 WorkGlobalScope 所有属性之外,自身多了一个 name 属性来标记当前的 Worker,其作用是方便用户在 debugger 期间查找方便。

事件处理程序

常用是的 onmessage 处理函数,其作用是监听主线程的 message 事件,当主线程发起一个 message 事件,对象子线程可以接收到对应的信息。

标准方法

postMessage方法作用就是主线程和子线程之间发送信息的函数。

Shared Worker 的上下文 (DedicatedWorkerGlobalScope)

标准属性

自身多了一个 name 属性来标记当前的 Worker,其作用是方便用户在 debugger 期间查找方便。

事件处理程序

常用是的 onconnect 处理函数,其作用是监听主线程的 connect 事件,当主线程中的 MessagePort 对象发起连接的时候,sharedWorker就和主线程建立联系了。

以上就是对应 Web Worker 对应常用语法的简单介绍了,但是其中依旧存在问题,为什么 sharedWorker 中一定要让其 port 对象去发起通信呢?以及 MessagePort 对象是什么情况才会出现的机制哩