Diff 算法

虚拟DOM是一种优化网页性能的技术,通过JS对象模拟DOM树,减少真实DOM的操作,避免频繁的重排和重绘。Diff算法用于找出新旧虚拟DOM的差异,局部更新视图,提高效率。首尾指针法是其比较策略之一,确保高效比对。
摘要由CSDN通过智能技术生成

一.虚拟DOM ?

        虚拟 DOM 指的是真实 DOM 的 JS 对象 

        在jQuery去操作DOM时,浏览器会从构建DOM树开始从头到尾执行一遍流程。如果我们要改变页面,只能遍历查询 DOM树,找到需要修改的 DOM,然后修改样式行或结构,以此来达到更新页面的目的(每次查询 DOM 都需要遍历全部 DOM 树

        在react,vue去操作DOM时,我们会用到虚拟 DOM,相当于建立一个与真实 DOM 树所对应的虚拟 DOM 对象即 JS 对象,并通过对象嵌套的方式来表示 dom 树及其层级结构,这样的话,如果我们每次对 DOM 的修改就变成了对 JS 对象的属性的增删改查,相比之下查找 JS 对象的属性变化要比直接查询真实 dom 树的性能开销小

虚拟DOM与真实DOM的区别?

1、虚拟DOM不需要进行重排与重绘操作;

2、虚拟DOM进行频繁修改,然后一次性比较并修改真实DOM中需要修改的部分,最后进行重排和重绘,减少过多DOM节点重排和重绘损耗。

3、虚拟DOM有效降低大面积(真实DOM节点)的重排和重绘,因为最终与真实DOM比较差异,可以局部渲染。

二.diff 算法

        1.目的

                当 DOM 树发生变化后,新旧真实 DOM 会生产对应的新旧虚拟 DOM,而 diff 算法可以判断新旧虚拟 DOM 的差异,也就是比较新旧 JS 对象的差异。-----> 目的:找出差异,最小化更新视图

        2.流程     

        2.path

        比较的第一步就是执行patch,它相当于对比的入口。既然是对比两个虚拟Dom,那么就将两个虚拟Dom作为参数传入patch中。patch的主要作用是对比两个虚拟Dom的根节点,并根据对比结果操作真实Dom。

         3.patchVnode

        用来比较两个虚拟节点的子节点并更新其子节点对应的真实Dom节点

        2.updateChildren

        diff算法,虚拟DOM中采用的算法,把树形结构按照层级分解,只比较同级元素,不同层级的节点只有创建和删除操作,这样就可以减少比对次数,提高性能.

         1.首尾指针法

        1 依次比较,当比较成功后退出当前比较

        2 渲染结果以 新节点 (newVnode)为准

        3 每次比较成功后stat点和end点向中间靠拢

        4 当新旧节点中有一个stat点跑到end点右侧时终止比较,如果都匹配不到,则旧虚拟DOM key值去比对新虚拟DOM的key值,如果key相同则复用,并移动到新虚拟DOM的位置

 

 

 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值