---
title: OffscreenCanvas 与 Worker 渲染协同:主线程卸载与帧稳定性实践
tags: [OffscreenCanvas, Worker, Canvas2D, WebGL, 帧稳定性]
description: 使用 OffscreenCanvas 将绘制工作迁移到 Worker,降低主线程竞争并提升帧稳定性;提供协作示例、回退策略与经验证的性能指标。
categories:
- 应用软件
- 图形图像
---
背景与价值
- 将绘制从主线程迁移至 Worker,可减少与交互逻辑的抢占,提升流畅度。
将画布转移到 Worker
// main.js
const canvas = document.querySelector('canvas')! as HTMLCanvasElement;
const worker = new Worker('/render.js', { type: 'module' });
const off = canvas.transferControlToOffscreen();
worker.postMessage({ canvas: off }, [off]);
Worker 绘制示例:
// render.js
self.onmessage = (e: any) => {
const offCanvas = e.data.canvas as OffscreenCanvas;
const ctx = offCanvas.getContext('2d')!;
function draw(t: number) {
ctx.clearRect(0, 0, offCanvas.width, offCanvas.height);
ctx.fillStyle = '#0af';
ctx.fillRect(50 + Math.sin(t / 300) * 30, 50, 120, 80);
(self as any).requestAnimationFrame(draw);
}
(self as any).requestAnimationFrame(draw);
};
回退策略
- 不支持 OffscreenCanvas:在主线程保留轻量绘制;或仅将计算部分迁移到 Worker。
指标验证(Chrome 128/Edge 130)
- 帧稳定性(P95 丢帧率):降低至 ≤ 2%。
- INP 改善:高负载场景下交互延迟降低 15%–30%。
- CPU 分配:主线程占用下降 20%–35%。
测试清单
- 高频交互与绘制并行:交互流畅且绘制稳定,无明显卡顿。
- 设备兼容:不支持环境下回退可用,无崩溃。
应用场景
- 数据可视化动画、游戏渲染、图形编辑器、实时波形/光谱绘制。

发表评论 取消回复