字号: AA A
2026.04.17
534
字号: AA A
很多人写 Canvas 卡顿、难维护,本质不是 API 难,而是“思维还停留在 DOM”。这篇给你一份偏实战的 Canvas 技术干货!
一、核心认知(90%的人卡在这)
Canvas 是“立即模式渲染”(Immediate Mode):
画完就结束,不会帮你保存结构
不存在“元素”,只有像素
你必须自己维护:
状态(数据)
渲染(draw)
更新(update)
本质模型其实是:
state -> update -> render
二、性能优化(重点)
1、不要每帧全量重绘
只重绘变化区域(脏矩形)
2、使用离屏 Canvas(OffscreenCanvas)
const off = document.createElement('canvas')
const offCtx = off.getContext('2d')
先画到内存,再一次性贴到主 canvas
避免频繁创建对象
在动画里 new Path / new Image
提前缓存
控制帧率
let last = 0
function loop(t) {
if (t - last > 16) {
render()
last = t
}
requestAnimationFrame(loop)
}
三、坐标 & 高清适配(很多人忽略)
Canvas 默认会“模糊”的原因:
没处理 devicePixelRatio
正确姿势:
const dpr = window.devicePixelRatio
canvas.width = width * dpr
canvas.height = height * dpr
ctx.scale(dpr, dpr)
四、绘制体系(建议这样组织)
不要到处写 ctx.xxx,建议封装一层:
class Renderer {
constructor(ctx) {
this.ctx = ctx
}
drawRect(x, y, w, h, color) {
const { ctx } = this
ctx.fillStyle = color
ctx.fillRect(x, y, w, h)
}
}
好处:
可维护
可复用
可扩展(比如加动画)
五、动画正确姿势
不要用 setInterval!
function animate() {
ctx.clearRect(0, 0, width, height)
update()
render()
requestAnimationFrame(animate)
}
animate()
requestAnimationFrame 会自动对齐浏览器刷新率(60fps+)
六、交互处理(命中检测)
Canvas 没有事件系统,你需要自己算:
常见方案:
bounding box 判断
路径命中:ctx.isPointInPath()
canvas.addEventListener('click', (e) => {
const x = e.offsetX
const y = e.offsetY
})
七、进阶方向
如果你要做复杂项目(比如大屏 / 编辑器 / 游戏):
分层 Canvas(背景层 / UI层 / 动画层)
WebGL(性能极限)
Worker + OffscreenCanvas(多线程渲染)
数据驱动渲染(类似 React 思维)
总结一句话:
Canvas ≠ 画图工具
它是一个“你自己实现渲染引擎”的能力。
这篇文章不讲概念,直接带你看一套从 0 → 亿级流量的演进路径。
2026.06.26
六大赛道依托顶层政策持续释放万亿级数字化需求,对于互联网软件开发企业而言,深耕垂直行业、夯实国产化技术能力、打造可量化价值的AI解决方案,将是未来1-3年稳定增长的核心路径。
2026.06.19
Vite 作为现代前端项目的事实标准脚手架,在这一阶段完成了其架构上的终极进化。以下是当前 Vite 生态中最核心的技术革新点:
2026.06.08
天健全流程智能访客系统,以便捷登记、高效审批、智能通行、严格管控、规范管理为核心优势,打通访客管理全流程壁垒。
2026.05.28
当设计师接到需求后,在第一时间往往是没办法立马开展设计工作的,因为我们需要对需求有比较全面的认识,才能明确设计方向,制定相应的设计计划。5WH就是一种可以帮助我们对需求做出分析的工具。
2026.05.21
产品
解决方案
关于我们
公司地址:成都市武侯区天益街38号理想中心3栋1810
Copyright© 天健世纪科技 All Rights Reserved.
蜀ICP备16016808号
长按/截图保存,微信识别二维码 或关注公众号“天健世纪科技”

扫一扫,关注我们
公司地址:成都市武侯区天益街38号理想中心3栋1810
Copyright© 天健世纪科技 All Rights Reserved. 蜀ICP备16016808号