无需登录 数据私有 本地保存

Web 推送通知调试器 - 检查订阅与推送参数

65
0
0
0

Web Worker 核心术语

Web Worker:运行在后台线程中的 JavaScript 执行环境。Worker 拥有独立的全局作用域,可以执行计算密集型任务而不阻塞主线程。Worker 分为专用 Worker(Dedicated Worker)和共享 Worker(Shared Worker)两种类型。专用 Worker 只能被创建它的脚本访问,共享 Worker 可以被多个脚本共享。

主线程(Main Thread):浏览器中负责处理用户交互、DOM 操作、样式计算、布局和绘制的核心线程。所有 JavaScript 代码默认在主线程上执行。主线程同时也是 UI 线程,其繁忙程度直接影响页面的响应性和视觉流畅度。

WorkerGlobalScope:Worker 的全局作用域对象,类似于主线程的 window 对象。Worker 中的代码运行在 WorkerGlobalScope 上下文中,可以访问部分 Web API(如 fetch、setTimeout、IndexedDB),但不能访问 DOM、window 和 document 对象。

postMessage:主线程与 Worker 之间通信的核心方法。调用 worker.postMessage(data) 可以向 Worker 发送消息,调用 self.postMessage(data) 可以向主线程发送消息。数据通过结构化克隆算法(Structured Clone Algorithm)进行序列化传递,支持大多数 JavaScript 数据类型。

onmessage:消息接收事件处理器。主线程通过 worker.onmessage = function(e) 监听 Worker 发来的消息,Worker 中通过 self.onmessage = function(e) 监听主线程发来的消息。事件对象 e 中的 data 属性包含传递的消息数据。

多线程编程术语

并发(Concurrency):多个任务在重叠的时间段内交替执行。在单核 CPU 上,并发通过时间片轮转实现;在多核 CPU 上,真正的并行执行使多个任务同时运行。Web Worker 利用操作系统的线程调度机制实现并发和并行计算。

线程安全(Thread Safety):多个线程同时访问共享数据时不会产生数据竞争和不一致问题的特性。Web Worker 通过消息传递机制(而非共享内存)来避免线程安全问题。Worker 之间不能直接共享变量,数据只能通过消息传递进行复制。

序列化(Serialization):将内存中的 JavaScript 对象转换为可传递的字节流的过程。postMessage 发送数据时会自动进行结构化克隆序列化。序列化过程会消耗 CPU 资源,对于包含循环引用、ArrayBuffer、Blob 等复杂数据结构的对象,序列化开销可能显著。

反序列化(Deserialization):将字节流还原为 JavaScript 对象的过程,是序列化的逆操作。接收端在收到消息时自动进行反序列化。序列化和反序列化的总耗时构成了 Worker 通信的额外开销。

性能相关术语

计算密集型任务(CPU-Bound Task):主要消耗 CPU 计算资源而非等待 I/O 的任务。典型的计算密集型任务包括数学运算、数据排序、图像处理、加密解密等。这类任务在主线程上执行时会显著阻塞其他操作,是 Web Worker 最适合卸载的任务类型。

帧率(Frame Rate):浏览器每秒渲染的画面帧数,以 FPS(Frames Per Second)衡量。60 FPS 对应每帧约 16.67ms 的处理时间。主线程被计算任务阻塞时帧率会下降,用户感知到动画卡顿和界面无响应。

结构化克隆算法(Structured Clone Algorithm):Web 标准定义的数据复制算法,用于在不同执行上下文之间传递复杂数据。支持的数据类型包括基本类型、Array、Object、Date、RegExp、Map、Set、ArrayBuffer、Blob、File、ImageData 等。不支持的类型(如函数、DOM 节点)会导致克隆失败。