虚拟DOM
1.什么是虚拟DOM
一个能代表DOM树的对象,通常含有标签名,标签上的属性,事件监听和子元素们,以及其他属性。
2.虚拟DOM有什么优点
- 减少DOM操作
- 可以将多次操作合并为一次操作(减少操作频率)。
- 可以借助
DOM diff省掉多余操作,只操作变化了的节点(减少操作范围)。
- 可以夸平台(虚拟
DOM本质上是一个JS对象,它不仅可以变成DOM对象,而且可以变成小程序、IOS应用、安卓应用等。)
3.虚拟DOM有什么缺点
必须使用babel或vue-loader来将JSX语法/vue-template转化为创建函数createElement或者h。
DOM diff
当数据变化时,DOM diff算法会只更新变化的地方,其他均不更新。
一个函数,patch,patches=patch(oldNode,newNode)。
大致的作用原理:Tree diff,将新旧DOM树逐层对比,找出需要更新的节点。如果节点是组件,就看Component diff;如果节点是标签,就看Element diff。
Component diff:如果节点是组件,就先看组件类型,类型不同直接替换,类型相同就只更新属性。然后继续深入组件做Tree diff。
Element diff:如果节点是原生标签,则看标签名。标签名不同直接替换,相同则只更新属性。然后进入标签后作Tree diff。
DOM diff也存在问题,需要用key来确定操作的节点。