课程
Canvas 精通之路
从一张转眼即忘的像素纸开始,逐步构建生产级无限画布编辑器,使它可重放、可测试、可访问、可迁移、可协作,并能安全地接受 AI 辅助修改。
- 模块
- 4 模块
- 课
- 18 课
- 预计时长
- 预计 72 小时
- 适合
- 适合: 掌握 HTML、CSS 和 TypeScript 基础,并希望精通生产级 Canvas 编辑器架构的前端工程师。
先看清整条路,再去记 API
- 选择表面 决定谁负责渲染,谁负责编辑
- 保存记录 对象存在于文档之中
- 进行交互 输入经过几何系统与状态机
- 让它出错 有意注入贴近现实的故障
- 证明它 用测试和追踪完成验收
五岁的孩子可以看懂一幅画,但生产系统必须回答更多问题。画里的东西叫什么?谁可以移动它们?崩溃后能否恢复?看不见画布的人还能操作它吗?十万个对象同时存在时,它为什么依然流畅?三个人和一个 AI 同时编辑时,究竟听谁的?
这门课程就从这些问题开始。每一章都会先给你一个能够装进脑海的玩具世界,让你可以预测将会发生什么。然后,我们才把这个玩具翻译成正式术语、TypeScript 接口、浏览器行为与测试证据。类比绝不能冒充事实:每一章都会明确指出类比在哪个位置失效。
你将构建什么
你会持续扩展同一个教学项目 Canvas Lab,最终把它变成一个具备以下能力的可视化操作画布:
- 自定义业务形状、文字、图片、连接线与吸附;
- 键盘和屏幕阅读器替代操作;
- 历史记录、自动保存、崩溃恢复与版本迁移;
- 安全的资产生命周期,以及 PNG、SVG、JSON 和分块高分辨率导出;
- 可重复的几何、状态机、浏览器、视觉与性能测试;
- 只在证据确实支持时才启用 Worker 或 GPU 渲染;
- 可恢复的多人同步、离线队列与在线状态;
- 只能执行有边界、可预览、可撤销、可审计操作的 AI。
始终分开这三个层次
- 文档 共享且持久的事实
- 会话 你设备上的工作状态
- 在线状态 来自当前在线成员的临时信号
渲染同样有边界。DOM 保留文本编辑、语义和无障碍能力;Canvas 2D 驱动高频教学内核;只有基准测试证明存在收益时,GPU 渲染器才会加入。文档永远不依赖某一种渲染器,因此换一把画笔,无须把整本账簿撕掉重写。
每一章的学习循环
- **摆弄一个玩具:**通过具体对象、动作和结果,建立可预测的心智模型。
- **翻译它:**把每个玩具元素映射到工程概念,并标出类比的边界。
- **消灭一个误解:**用最小反例揭示一种只在演示中成立的直觉。
- **构建一项能力:**为 Canvas Lab 增加一项可运行、可测试的功能。
- **故意让它出错:**记录症状、日志或追踪、根因、修复方案与回归测试。
- **用证据验收:**能自动证明的就自动化;仍需人工验证的,则记录环境与验收标准。
- **把它讲给别人:**不用术语解释规则,并把它迁移到一个新场景。
开始之前
课程中的所有示例都使用严格模式的 TypeScript。你需要现代浏览器、Node.js 22、一个包管理器、浏览器开发者工具,以及能够运行单元测试和浏览器测试的终端。涉及 React、tldraw、WebGPU 或浏览器兼容性的章节,会固定具体版本或注明验证日期。与时间相关的结论必须根据官方文档重新核验。
你无须预先了解矩阵、空间索引、CRDT 或着色器。只要始终做到三件事:先预测,亲手让系统出错,再用证据解释为什么修复有效。
课程进度
课程大纲
第一部分:落笔之前先选画布——产品、像素与坐标
将无限画布的产品模型与渲染技术分开,再用统一坐标构建清晰、可重放的教学内核。
第二部分:给像素世界装上大脑——模型、调度、输入与工具
让文档成为唯一事实来源,将 React 与高频引擎分开,并围绕规范化输入、几何查询和状态机组织交互。
- 05 第 5 章:给像素世界建立档案库 定义稳定 ID、场景图、形状/资产/绑定记录,以及独立于渲染器的领域适配器边界。 已发布
- 06 第 6 章:灯亮时才重绘——渲染调度与 React 边界 通过失效标记驱动渲染,并确保 React Strict Mode 下始终只有一个活动引擎、一组观察器与监听器,以及一个 rAF 循环。 已发布
- 07 第 7 章:鼠标、触控与触控笔说同一种语言 把指针、滚轮、键盘和手势输入转换成供工具层使用的规范化世界坐标事件。 已发布
- 08 第 8 章:检查边缘之前,先找到大盒子 构建独立于 Canvas 的 GeometryKernel,并组合宽阶段与窄阶段查询,实现精确命中测试。 已发布
- 09 第 9 章:工具是交通灯,不是一袋布尔值 用显式状态、守卫条件、取消、提交和命令实现选择、抓手、矩形、自由绘制与橡皮擦工具。 已发布
第三部分:从“能拖动”到“值得信赖”——交互、文字、资产与恢复
加入专业的交互手感、原生文本编辑、安全资产管线、时间旅行、迁移、测试、无障碍与可观测性。
- 10 第 10 章:让编辑器用起来顺手 实现多选、缩放、旋转、吸附、连接线、剪贴板、拖动复制和边缘滚动,并在每个缩放级别保持稳定阈值。 已发布
- 11 第 11 章:画出来的文字,不等于可编辑文字 让 Canvas 负责预览、DOM 负责编辑,并正确处理字体、换行、字素、双向文本、输入法、光标与选择区。 已发布
- 12 第 12 章:借来的图片不能毫无规矩地打包 设计覆盖上传、解码、CORS、源清洁性、SVG 净化、内存预算和多格式导出的资产协议。 已发布
- 13 第 13 章:时间机器与旧箱子 用事务实现撤销/重做,用验证和幂等迁移处理版本化数据,并将文档、会话与在线状态分离。 已发布
- 14 第 14 章:看起来正确,不代表真的正确 从模型、状态机、浏览器、视觉、无障碍、性能和生产遥测等层面验证 Canvas 编辑器。 已发布
第四部分:大师级决策——性能、Worker、GPU、SDK、协作与 AI
先用追踪找出瓶颈,再升级线程或渲染器;随后明确做出自研、采购、混合方案及协作协议的决策。
- 15 第 15 章:不要逐个搜索一万个孩子 建立可重复基准,衡量失效标记、剔除、空间索引、缓存、LOD 与内存限制带来的提升。 已发布
- 16 第 16 章:别让前台挤进厨房——Worker 与 GPU 升级 比较主线程 Canvas 2D、OffscreenCanvas Worker 和 GPU 原型,并处理乱序、背压、崩溃、设备丢失与降级。 已发布
- 17 第 17 章:自己造车,还是购买成熟底盘? 固定使用 tldraw 5.x 版本,在原生 Canvas、SVG、Konva、GPU、Three.js 与 tldraw 之间编写自研/采购/混合方案 ADR。 已发布
- 18 第 18 章:人与 AI 编辑同一本账簿 比较服务器权威同步与 CRDT,再将 AI 限制在经过验证、可预览、可撤销、可审计的类型化操作内。 已发布