1.虚拟DOM的优点
- 虚拟DOM是为了解决浏览器性能问题而被设计出来的。优化DOM操作的次数,减少DOM操作的范围(将进行筛选,只对改变的元素进行操作)。
- 比如有10次循环,虚拟DOM不会立即操作DOM,而是将10次的diff内容保存在一个js对象里面,然后一次性的操作,避免大量无谓的计算
- 虚拟DOM借助DOM diff把多余的操作省掉,比如你添加1000个节点,但是只有10个是新增的,这时候DOM diff就会把他们筛选出来,只对这部分进行操作。
- 跨平台渲染:虚拟DOM不仅可以变成DOM,还可以变成小程序、IOS应用、安卓应用,因为虚拟DOM本质上只是一个JS对象。
2.如何创建虚拟DOM
- 这个对象就表现了一个标签为div,子元素为两个span,className为red,点击事件调用一个函数的DOM。
- 虚拟DOM是一个能代表DOM树的对象,通常含有标签名、标签上的属性、事件监听和子元素们,以及其他属性。
- 虚拟DOM缺点:需要额外创建函数,如creatElement或h.可以通过JSX来简化成XML写法严重依赖打包工具;当规模较小时一定是react优化的更好,规模较小的时候虚拟DOM是快的,规模太大的时候,反而虚拟DOM、额外的计算会让他变慢,原生DOM可以保持一定的稳定性。
3.DOM diff(虚拟DOM的对比算法)
数据改变,虚拟DOM也会改变,我们不想重新渲染dom,我们只想渲染改变的部分,就需要用到diff算法
下标不可靠,只有主动标记,也就是加key,才能避免DOM diff 的bug