React Fiber 与 双缓冲机制

本文介绍了React中的核心概念——虚拟DOM和Fiber,以及如何通过双缓冲机制优化更新流程。虚拟DOM通过减少DOM操作提高性能,Fiber通过任务分片确保高优先级任务的及时响应。双缓冲结构在内存中构建新的Fiber树,避免频繁交换DOM导致的性能开销。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 虚拟dom

在学习 Fiber 之前,首先回顾下 虚拟Dom

1. 什么是虚拟Dom?

        虚拟DOM可以看做一棵模拟了真实DOM树的JavaScript对象树, 它其实是一个js对象,对象中所包含的信息会告诉页面上需要渲染什么样的节点,包括及其子节点的描述信息。

        但虚拟dom并不会完全复刻真实dom,虚拟dom只承载必要的信息,这也是使用虚拟dom的原因之一,因为一个真实的dom对象实际上有很多属性与方法,如果在进行diff算法时是对真实dom进行对比,会产生不必要的消耗。

2. 为什么使用 虚拟Dom?

        以查找js对象的方式代替以往递归dom树的操作,将频繁更新dom的行为优先转为js对象的增删改查;通过diff算法保证最小化的DOM操作;减少重绘重排的次数。

2. React Fiber

1. 什么是 Fiber ?

        Fiber 是一个分片执行单元,每执行完一个单元,React会检查现在还剩多少时间,如果没有时间则交出控制权。

        Fiber是一个链表数据结构:

                Child 指向 当前Fiber的第一个子节点

                Sibling 指向当前Fiber的的下一个兄弟节点

                Return 指向当前 Fiber 节点的 父节点

        由于要实现低优先级任务的暂停更新,但是在高优先级任务执行完成之后还要回来继续执行低优先级任务,因此使用链表数据结构,通过指针和地址对任务进行关联。

2. 为什么使用 Fiber?

        当 React 树太过庞大时,递归Diff会很消耗时间,会造成主线程被持续占用,有一些高优先级的任务得不到处理。因为JS单线程的原因,每个同步任务不能阻塞太长时间,因此需要对一些耗时长的任务进行分片,每一个分片所对应的数据结构就是Fiber。

        高优先级任务:例如用户交互,点击或输入事件。如果点击或输入迟迟无法得到响应,用户体检一定是极差的。

3. 双缓冲结构

  • react 根据双缓冲机制维护了两个fiber树,一颗用于渲染页面 (current),一颗是 workInProgress Fiber 树,用于在内存中构建,然后方便在构建完成后直接昔换 current Fiber树

  • workInprogress Fiber 树的 alternate 指向 Current Fiber树的对应节点, current 表示页面正在使用的 fiber 树

  • 当 workInprogress Fiber 树构建完成,workInProgress Fiber 则成为了 current 渲染到页面上,而之前的 current 则缓存起来成为下一次的workInProgress Fiber,完成双缓冲模型

4. 图解双缓冲结构

<div key="A">

        <div key="B1"></div>

        <div key="B2"></div>

</div>

A的 child 指向第一个儿子 B1,B1的 return 指向 A

B1的 sibiling指向他的兄弟 B2,B2的 return 指向 A

 

        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值