# 1、什么叫虚拟dom?
virtral Dom
就是将真实Dom的数据抽象处理,以对象的形式模拟树形结构。虚拟DOM本质上是JavaScript对象,是对真实DOM的抽象。状态变更时,记录新树和旧树的差异(diff算法
),最后把差异更新到真正的dom中(patch算法
)。
//真实dom
<div>
<span>测试</span>
</div>
//虚拟dom 伪代码 Vnode和oldVnode都是对象
var Vnode = {
tag: 'div',
children: [
{ tag: 'span', text: '测试' }
]
};
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
虚拟dom的优点
- 1、保证性能下限。虚拟dom通过diff找出最小差异,然后批量进行patch,这种操作比起粗暴的直接操作dom,性能要好上很多。
- 2、无须直接操作dom,可以极大的提升开发效率。
- 3、跨平台。如服务端渲染,移动端开发。
缺点:
- 无法进行极致优化: 虽然虚拟 DOM + 合理的优化,足以应对绝大部分应用的性能需求,但在一些性能要求极高的应用中虚拟 DOM 无法进行针对性的极致优化。
# 2、diff算法(差分算法)
采用diff算法比较新旧节点时,只会在同层级进行,不会跨层级比较。