虚拟DOM(Virtual dom),也就是我们常说的虚拟节点,它是通过JS的Object对象模拟DOM中的节点,然后再通过特定的render方法将其渲染成真实的DOM的节点。
为什么要使用虚拟DOM呢,因为操作真实DOM的耗费的性能代价太高,频繁的操作DOM,会大量的造成页面的重绘和回流,出于性能优化的考虑,我们应该减少重绘和回流的操作。对虚拟节点的DOM操作,并不会触发重绘和回流,把处理后的虚拟节点映射到真实DOM上,只触发一次重绘和回流。
我们都知道Vue是基于数据驱动的,数据变化之后,不会像jQuery那样进行页面全部节点的渲染,而是进行局部节点的渲染。
那如何判断哪个节点变化呢,利用的就是虚拟DOM和真实DOM的对比,而对比的方法就是diff算法。
为了实现虚拟DOM,我们需要通过JS把每种DOM抽象成对象,每一种节点类型有自己的属性,也就是prop,每次进行diff的时候,先比较该节点类型,假如节点类型不一样,就直接删除该节点,然后直接创建新的节点插入到其中,假如节点类型一样,那么会比较prop是否有更新,假如有prop不一样,那么就判定该节点有更新,重新渲染该节点,然后在对其子节点进行比较,一层一层往下,直到没有子节点。
// 创建虚拟节点
var temp = document