Worklet 是什么?与 Web Worker 和 Service Worker 有什么区别?
请说明 Worklet 的概念、类型(PaintWorklet / AudioWorklet / LayoutWorklet)以及与 Web Worker 的区别。
回答
我还是少年
Worklet:浏览器渲染管道的轻量级钩子,可以执行特定渲染阶段的自定义逻辑。
类型:
- PaintWorklet(CSS Painting API):自定义 CSS 绘制
// 注册 Paint Worklet
registerPaint('myBackground', class {
paint(ctx, size) {
ctx.fillStyle = 'red';
ctx.fillRect(0, 0, size.width, size.height);
}
});
CSS 中使用:background: paint(myBackground);
- AudioWorklet:音频处理线程,实现自定义音频节点
- LayoutWorklet(CSS Layout API):自定义布局算法(实验阶段)
- AnimationWorklet:高性能动画控制
与 Web Worker 和 Service Worker 对比:
| 特性 | Web Worker | Service Worker | Worklet |
|---|---|---|---|
| 用途 | 通用后台计算 | 网络代理/离线/推送 | 渲染管道扩展 |
| 生命周期 | 页面关联,任务完成后可终止 | 独立于页面,由事件驱动 | 轻量级,按需调用 |
| DOM 访问 | ❌ | ❌ | ❌ |
| 线程模型 | 独立线程 | 独立线程 | 渲染线程的子线程 |
| API 支持 | 丰富(XHR/IndexedDB等) | 有限 | 渲染相关 API 专属 |
| 典型场景 | 复杂计算/数据处理 | 缓存/离线/推送 | 自定义 CSS/音频处理 |
注意:Worklet 极其轻量,创建销毁开销极低,适合高频调用的渲染场景。