Canvas渲染嵌入浏览器图形管线,不参与DOM流程但依赖光栅化、合成与GPU调度;其2D渲染分四阶段执行,性能瓶颈多在CPU端,需通过批量合并、空间裁剪、分层缓存和线程卸载优化。
Canvas图形渲染不是“画完就完”,而是嵌入在浏览器整套图形管线中的一环。它不走DOM流程,但依赖底层光栅化、合成与GPU调度——理解这条流水线,才能真正掌控性能。
Canvas元素本身是DOM节点,但一旦获取2D上下文,所有绘图操作就脱离了CSS盒模型和布局计算。浏览器不会为每个fillRect重新计算样式、触发重排(reflow)或重绘(repaint)。它直接把指令交给Skia等图形库,在CPU或GPU缓冲区生成像素数据,再提交纹理给合成器。这意味着:DOM变动不影响Canvas内容,Canvas内容也不会影响DOM树结构。
每次调用ctx.fillRect()等API,实际触发以下隐式流程:
fillStyle、剪辑区域)Canvas 2D的常见卡顿,往往不是显卡不够快,而是CPU被拖慢:
beginPath()和fill()调用,引发大量状态切换与内存拷贝ctx.globalAlpha或ctx.shadowColor等属性,触发内部状态重建高效Canvas不靠“写得更巧”,而靠“分得更准”:
fillStyle设置次数drawImage贴图;动态元素单独层更新