虚拟 DOM 和 DOM diff

247 阅读1分钟

虚拟DOM是什么

虚拟DOM顾名思义,就是模拟一个DOM树。DOM树由结点构成,在JavaScript里面如何模拟结点呢?用对象。
因此该对象包含有树节点的属性,如标签名,标签属性,子元素对象等。
通过组合对象,生成一个树形结构,模拟DOM树。

为什么要用虚拟DOM

减少操作真实DOM的次数,减少渲染次数

我们知道每次操作真实DOM,页面都会进行渲染。
因此减少对真实DOM的操作次数可以减少大量的页面渲染时间
举个例子,加入往页面加入100个div,不使用虚拟DOM,每次只能加一个div,要加一百次,这就意味着页面要渲染100次。
使用虚拟DOM,可以在虚拟DOM内加入100个div结点并且不触发渲染,加入完成后在映射到真实的DOM上,整个过程只需要渲染1次页面。

跨平台

js生成的虚拟DOM不但可以在浏览器映射成DOM树,在其它平台也可以,如微信小程序等。

DOM diff

使用DOM diff,在渲染页面前比较页面异同,相同则不渲染,减少渲染性能消耗。
diff算法的基本规则是从根节点开始比较。
比较过程中可能遇到两种节点,组件和元素。
组件: 假如组件类型相同,则继续按层级比较,否则肯定要渲染。
元素:假如是原生标签,则按类名决定是否渲染。如果不是则进入标签层级比较。