扫码关注公众号

前端校招考点之vue重排与重绘-diff
07-09
91观看
01

diff 算法是什么?

Vue和React都是基于vdom的前端框架,组件渲染会返回vdom,渲染器再把vdom通过增删改的api同步到dom。当再次渲染时,会产生新的vdom,渲染器会对比两棵vdom树,对有差异的部分通过增删改的api更新到dom。这里对比两棵vdom树,找到有差异的部分的算法,就叫做diff算法。

来自:vue.js-vue重排与重绘-diff
02

Vue Diff算法的原因以及目的

Vuediff算法是vue2中引入虚拟DOM的产物,它的出现是为了通过对比新旧节点计算出需要改动的最小变化。核心思想:尽可能的复用老节点

来自:vue.js-vue重排与重绘-diff
03

什么是虚拟DOM和diff算法

虚拟DOM就是用来表示真实dom的对象,vue通过模版编译生成虚拟DOM树,然后在通过渲染器渲染成真实DOM,当数据更新时,产生新的虚拟dom树,如果直接用新的虚拟DOM树生成真实DOM并不是最优的方法。为了进一步降低找出差异的性能的性能消耗,就要使用diff算法。Diff算法是一种对比算法。对比两者是旧虚拟DOM和新虚拟DOM,对比出是哪个虚拟节点更改了,找出这个虚拟节点,并只更新这个虚拟节点所对应的真实节点,实现精准地更新真实DOM。

来自:vue.js-vue重排与重绘-diff
04

vue2 和 vue3 diff 算法的区别

vue2是全量进行diff,而vue3使用了静态标记,只对打标记的节点进行diffvue2中的虚拟dom是进行全量的对比,在运行时会对所有节点生成一个虚拟节点树,当页面数据发生变更好,会遍历判断虚拟dom所有节点(包括一些不会变化的节点)有没有发生变化;vue3在diff算法中相比vue2增加了静态标记,在模版编译时,编译器会在动态标签末尾加上/*Text*/PatchFlag。也就是在生成VNode的时候,同时打上标记,patch过程中就会判断这个标记来Diff优化流程,跳过一些静态节点对比

来自:vue.js-vue重排与重绘-diff
课程
专栏
【校招VIP】vue核心面试题:diff算法
csdn
【校招VIP】一文教会你何为重绘、回流?
csdn
重绘
回流
js语言和框架-vue.js-vue重排与重绘-diff
3专栏
1课程
4 试题