一、虚拟 DOM 是什么
一个能代表DOM树的对象,通常含有标签名、标签上的属性、事件监听、子元素,以及其他属性
二、虚拟 DOM 的优点
1. 减少DOM操作:
(1)虚拟DOM将多次操作合并为一个。减少次数
(2)借助DOM diff把操作次数节省。减小范围
2. 跨平台:
可以把虚拟DOM做成app者view,因为虚拟DOM的本质是一个JS对象
三、虚拟 DOM 的缺点
需要额外的创建函数,如createElement或h,且严重依赖打包工具。
但我们可以通过JXS来简化成XML写法。
四、DOM diff 是什么
DOM diff是虚拟DOM的对比算法
我们可以把虚拟DOM想象成树形:
<div:class="x">
<spanv-if="y">{string1}</span>
<span>{string2}</span>
</div>
举例一:
当数据变化,x从red变为green
此时DOM diff发现:
div标签类型没变,只需要更新div对应的DOM的属性。
而子元素没变,不更新子元素。
举例二:
当数据变化,y从true变为false
DOM diff发现:
div没变,不更新。
子元素1标签没变,但是children变了,更新DOM内容。
子元素2不见了,删除对应的DOM。
五、DOM diff 的优点
DOM diff算法通过将新的DOM树和旧的DOM树进行比较,只对变化的部分进行渲染,大大提高了渲染效率。
六、DOM diff 的问题
同级节点对比存在Bug,会出现识别错误的问题。
解决方法:使用Key值进行命名区分。