# 离屏渲染
OffscreenCanvas 提供了一个可以脱离屏幕渲染的 canvas 对象。它在窗口环境和 web worker 环境均有效。
# 双缓冲渲染
使用双缓冲解决移动端 Canvas闪屏的问题
- 闪屏 是因为不支持 raf
- 使用双缓冲,来解决 drawcall 的 帧生成时间超过显示屏的每帧间隔的问题
- 双缓冲的原理是:在另一个 canvas 上下文 ctx2 进行 drawcall ,等 ctx2 的 drawcall 完成后, ctx1 直接使用 drawImage(ctx2, width,height) 渲染 ctx2 的结果 。
# 多线程渲染
由于可以在 worker 使用 canvas 对象,这意味着我们可以在将复杂的运算任务分配到多个 worker 中。
Transfer Demo 运行流程大致如下:
- 主线程启动 Worker 线程,并请求初始化;
- Worker 线程创建 OffscreenCanvas;
- Worker 线程获取 OffscreenCanvas 的 WebGL Context 并进行绘制;
- Worker 线程获取 OffscreenCanvas 的缓冲区(ImageBitmap),然后 Transfer 回主线程;
- 主线程将 Worker 线程回传的缓冲区分别绘制在两个不同的 Canvas 上,一个 Canvas 使用 CanvasRenderingContext2D,一个 Canvas 使用 ImageBitmapRenderingContext;
- 3 ~ 5 重复运行;