背景与价值将绘制从主线程迁移至 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%。测试清单高频交互与绘制并行:交互流畅且绘制稳定,无明显卡顿。设备兼容:不支持环境下回退可用,无崩溃。应用场景数据可视化动画、游戏渲染、图形编辑器、实时波形/光谱绘制。

发表评论 取消回复