框架中的概念,用JS对象来模拟页面上DOM和DOM之间的嵌套,本质是一个对象,而且把原生对象中的属性根据需要添加,不是全部存在,更‘轻’。
原理:
- 用 JavaScript 对象模拟真实 DOM 树,对真实 DOM 进行抽象;
diff 算法
— 比较两棵虚拟 DOM 树的差异;- 将两个虚拟 DOM 对象的差异应用到真正的 DOM 树
优点:
保证性能下限: 虚拟DOM可以经过diff找出最小差异,然后批量进行patch,比起粗暴的 DOM 操作性能要好很多。
无需手动操作 DOM: 我们不再需要手动去操作 DOM,只需要写好 View-Model 的代码逻辑,框架会根据虚拟 DOM 和 数据双向绑定,极大提高我们的开发效率;
跨平台: 虚拟 DOM 本质上是 JavaScript 对象,而 DOM 与平台强相关,相比之下虚拟 DOM 可以进行更方便地跨平台操作。
缺点:
第一次进去渲染大量的dom,多一层虚拟dom的计算,加载时间过长。
无法进行极致的优化。