欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

虚拟DOM相关整理

程序员文章站 2022-05-12 22:03:49
...


本章内容,是看过B站视频 面试大厂必问:虚拟DOM与DOM Diff 的原理之后自己整理的,只用于自己知识的补充。
通常说的,DOM操作慢,是对比于JS原生API,如数组操作。

1.什么是虚拟DOM操作,优缺点什么

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

1.1虚拟DOM优点:

虚拟DOM优点:减少DOM操作,跨平台

1.1.1 减少DOM操作

1)虚拟DOM可以将多次操作合并为一次操作,比如:你添加1000个节点,js原生是一个一个添加的,而虚拟DOM是一次性添加到页面上,本质减少DOM操作的次数
2)虚拟DOM借助DOM diff可以把多余的操作省掉,比如你添加1000个节点,其中只有10个是新增的,通过diff算法发现其中990个是之前页面就有的,只有10个是新增的,那么就只会新增10个,本质减少了dom操作的范围

1.1.2 跨平台

虚拟DOM 不仅可以应用于浏览器,小程序,安卓应用,IOS应用都可以使用,虚拟DOM本质上是一个JS对象。

1.2虚拟DOM缺点:

需要额外的创建函数,react(creatElement) vue(h),但可以通过JSX/vue-loader 进行转义成XML写法。(缺点:过分依赖打包工具)

2.什么是DOM diff

就是一个函数,称之为patch

const patches = patch(oldVnode,newVnode) 

patches 就是要运行的DOM操作,插入,修改内容,更新属性等。

DOM diff主要逻辑:
Tree diff
将新旧两棵树进行逐层对比,找出哪些节点需要更新;
如果节点是组件就看 Component diff;
如果节点是标签就看Element diff;
Component diff
如果节点是组件,就先看组件类型;
如果类型不同直接替换,类型相同则只更新属性;
然后深入组件做Tree diff ;
Element diff
如果节点是原生标签,则看标签名;
标签名不同则直接替换,相同则只更新属性;
然后进入标签做Tree diff.

相关标签: 技术补充