虚拟DOM和DOM diff

132 阅读1分钟

虚拟DOM

1.什么是虚拟DOM

一个能代表DOM树的对象,通常含有标签名,标签上的属性,事件监听和子元素们,以及其他属性。

2.虚拟DOM有什么优点

  • 减少DOM操作
    • 可以将多次操作合并为一次操作(减少操作频率)。
    • 可以借助DOM diff省掉多余操作,只操作变化了的节点(减少操作范围)。
  • 可以夸平台(虚拟DOM本质上是一个JS对象,它不仅可以变成DOM对象,而且可以变成小程序、IOS应用、安卓应用等。)

3.虚拟DOM有什么缺点

必须使用babelvue-loader来将JSX语法/vue-template转化为创建函数createElement或者h

DOM diff

当数据变化时,DOM diff算法会只更新变化的地方,其他均不更新。 一个函数,patchpatches=patch(oldNode,newNode)

大致的作用原理:Tree diff,将新旧DOM树逐层对比,找出需要更新的节点。如果节点是组件,就看Component diff;如果节点是标签,就看Element diff

Component diff:如果节点是组件,就先看组件类型,类型不同直接替换,类型相同就只更新属性。然后继续深入组件做Tree diff

Element diff:如果节点是原生标签,则看标签名。标签名不同直接替换,相同则只更新属性。然后进入标签后作Tree diff

DOM diff也存在问题,需要用key来确定操作的节点。