最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • React虚拟dom与diff算法

    正文概述 掘金(Sailing)   2021-03-12   374

    一、虚拟dom

    1、虚拟dom的产生

    虚拟dom(Virtul DOM)。通过模拟DOM中的真实节点中的对象属性与方法,生成属于React自己的dom,再通过底层的render方法将其渲染成真实的DOM节点。

    React使用JSX编写虚拟DOM对象。

    直接更新页面上真实的 dom 成本很高,耗费性能大,virtual dom的出现解决了这个问题。

    2、虚拟dom的渲染过程

    js生成vNode -> js渲染成真实节点 -> js挂载到页面 -> diff比较

    在这个过程中产生了React的生命周期(生命周期详见)

    如果操作dom或更新了dom,React底层通过diff算法来对比新旧virtual dom后,找出不同地方,然后只更新发生变化的部分。这样来更新 dom 就大大地节省了成本,并且提供良好的用户体验。

    二、diff算法

    react特点之一,节省性能。diff算法就是为了节省性能而设计的。

    diff算法和vdom的组合是核心中的核心。

    1、diff算法的基本流程

    diff算法的作用是,通过计算第一次和第二次 vdom 中真正变化的部分,从而只是针对变化的部分进行更新渲染,避免性能浪费。

    2、diff算法的三大策略

    1)tree diff(层级对比)

    由于开发过程中极少出现DOM的跨层级移动,所以 tree diff 忽略了DOM节点的跨层级移动。

    2)component diff(组件对比)

    同类型的两个组件,直接比较 vdom 树,不同类型的组件将会被定为脏组件(dirtyCompnent)处理,直接删除或者创建新组件。

    3)element diff(节点对比)

    对于同一层级的一组子组件,通过分配唯一的key值进行区分。

    3、策略一 tree diff

    tree diff 是diff算法的基础策略。

    它的重点在于同层比较。

    react对 vdom 树进行层级控制,也就是说,只对相同层级的DOM节点进行比较(即同一个父节点下的所有子节点)。不同级的(只有创建节点和删除节点的操作,官方不建议跨层级操作)。

    对比时,一旦发现节点不存在,直接删除该节点以及之下的所有子节点。

    对 vdom 树进行依次遍历,完成整个树的对比。时间复杂度 O(n)。

    React虚拟dom与diff算法

    4、策略二 component diff

    组件间对比时,也有3中策略。

    1)遇到同一类型的组件遵循 tree diff,进行层级对比。

    2)遇到不同类型的组件时,直接将这个不同的组件判断为 dirty component(脏组件),并替换该组件和该组件下的所有子节点。

    3)同一类型的两个组件中,如果你知道这个组件的 vdom 没有发生变化,你可以通过 shouldComponentUpdate() 来判断组件是否进行diff,进一步提升diff效率和性能。

    5、策略三 element diff

    同一层级的element节点对比。

    3中情况。

    1)插入操作(INSERT_MARKUP)

    对入新的节点,执行插入操作。

    2)删除操作(REMOVE_NODE)

    1)组件新集合中有组件旧集合中的类型,但对应的element不可更新,只能执行删除。 2)旧组件不在新集合里面,执行删除。

    3)移动操作(MOVE_EXISTING)

    同层级的组件发生了移动操作。在element diff中,对新旧的对比双方都添加了唯一的key值进行区分,只要对应的key值对应的元素没有改变,这个时候执行移动操作。


    起源地下载网 » React虚拟dom与diff算法

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元