⚡ 30 秒速记
- 核心判断:虚拟节点是对界面结构的描述,渲染器通过挂载与更新把声明式描述映射为宿主环境操作
- 原理主线:围绕 「一、为什么需要虚拟DOM」、「二、实现虚拟DOM」、「三、Diff算法」 建立输入、状态变化与输出之间的因果关系
- 文章范围:介绍了虚拟DOM(vdom)的概念、作用及其在前端开发中的应用场景,分析了传统DOM操作的性能瓶颈,并通过对比jQuery实现与vdom方案,讲解了vdom的核心API及其如何提升页面渲染效率,适合前端开发者深入理解虚拟DOM原理。
- 边界与代价:
key、节点类型和稳定序列决定复用边界;虚拟 DOM 解决可预测更新,不保证永远比手写 DOM 快 - 工程落地:性能分析要看实际提交次数、节点移动和组件边界,不能只用“减少 DOM 操作”解释
虚拟 DOM 的更新过程,是比较新旧节点生成补丁,再把必要变更应用到真实 DOM。 常见变化可以归为节点替换、属性或文本更新,以及子节点重排;同层比较用一定精确性换取接近 O(n) 的处理成本。列表中的 key 能帮助算法识别节点身份,减少插入、删除或移动时不必要的卸载和重建。若节点类型发生变化,旧节点及其子树通常会被替换,因此应避免没有实际意义的类型切换。
这篇文章不要按 API 清单来背。先用上面的 Mind Map 建立全局结构,再通过交互 DEMO 观察正常路径和边界路径如何改变状态;阅读正文时重点核对每一步的输入、负责执行的参与者、产生的中间状态以及最终可观察结果。遇到版本敏感结论,要把“历史实现”“当前行为”和“工程兼容策略”分开说明;遇到性能或架构取舍,则用实际指标、失败现象和验证手段支撑判断。
版本校准: 原理文章中的代码代表特定实现与写作时间。应用到当前项目时,应先确认浏览器、框架或工具的主版本,再区分稳定的规范语义、可变化的内部实现和项目自身约束。
# 一、为什么需要虚拟DOM
先介绍浏览器加载一个
HTML文件需要做哪些事,帮助我们理解为什么我们需要虚拟DOM。webkit引擎的处理流程

所有浏览器的引擎工作流程都差不多,如上图大致分5步:创建
DOM tree–> 创建Style Rules-> 构建Render tree-> 布局Layout–> 绘制Painting
- 第一步,用
HTML分析器,分析HTML元素,构建一颗DOM树。 - 第二步:用
CSS分析器,分析CSS文件和元素上的inline样式,生成页面的样式表。 - 第三步:将上面的
DOM树和样式表,关联起来,构建一颗Render树。这一过程又称为Attachment。每个DOM节点都有attach方法,接受样式信息,返回一个render对象(又名renderer)。这些render对象最终会被构建成一颗Render树。 - 第四步:有了
Render树后,浏览器开始布局,会为每个Render树上的节点确定一个在显示屏上出现的精确坐标值。 - 第五步:
Render数有了,节点显示的位置坐标也有了,最后就是调用每个节点的paint方法,让它们显示出来。