虚拟DOM就是普通的js对象。是一个用来描述真实dom结构的js对象,因为它不是真实的dom,所以才叫做虚拟dom。
虚拟dom的作用
- 我们都知道传统的dom数据发生变化的时候,我们都需要不断的去操作dom,才能更新dom数据,虽然后面出现了模板引擎,可以让我们一次性更新多个dom。但模板引擎依旧没有一种可以追踪状态的机制,当引擎内某个数据发生变化时,它依然操作dom去重新渲染整个引擎。
而虚拟dom可以很好地跟踪当前dom状态,因为它会根据当前数据生成一个描述当前dom结构的虚拟dom,然后数据发生变化时,有生成一个新的虚拟dom,而两个虚拟dom恰好保存了变化前后的状态。然后通过diff算法,计算出当前两个虚拟dom之间的差异,得出一个更好的替换方案。
首先代码初次运行,当走到create 到 beforeMount之间的时候,会编译template模板生成render函数。然后render函数运行时,h函数被调用,而h函数内调用vnode函数生成虚拟dom,并返回生成结果,故虚拟dom第一次生成。
之后当数据发生变化会重新编译生成一个新的vnode,接着进行新旧对比,调用dif算法,找出差异
因此,虚拟dom的意义就在于使找出擦会议的性能消耗最小化。