首页 > 其他分享 >React Fiber 原理

React Fiber 原理

时间:2024-10-07 18:44:02浏览次数:4  
标签:Fiber DOM React 任务 requestIdleCallback 原理 执行

React Fiber

在 React 16 之前的版本对比更新 VirtualDOM 的过程是采用 Stack 架构实现的,也就是循环加递归,这种方式的问题是一旦任务开始进行就无法被中断。

如果应用中的组件数量庞大, Virtual DOM 的层级比较深,主线程被长期占用,知道整颗 Virtual DOM 树比对更新完成之后主线程才能被释放,主线程才能执行其他的任务,这会导致一些用户交互,动画等任务无法得到立即执行,页面会卡顿,非常影响用户体验。

核心问题是:递归无法被中断,执行任务耗时长,JavaScript 是单线程的,和 Native GUI 互斥,比较 VirtualDOM 的过程中无法执行其他任务,导致任务延迟页面卡顿,用户体验差。

Fiber 的思路

  1. 放弃递归调用,采用循环模拟递归,因为循环可以被随时中断
  2. Fiber 将大的渲染任务拆分成一个个小任务(Fiber节点的创建)
  3. React 使用 window.requestIdleCallback 去利用浏览器的空闲时间去执行小任务,React 在执行一个任务单元后,查看是否有其他高优先级的任务,如果有,放弃占用线程,先执行优先级高的任务

关于 window.requestIdleCallback 的作用,可以查看 https://developer.mozilla.org/zh-CN/docs/Web/API/Window/requestIdleCallback ,例子可以查看 https://github.com/zjy4fun/requestIdleCallback

Fiber 的结构

// 简易版 Fiber 对象
type Fiber = {
  // 组件类型 div、span、组件构造函数
  type: any,
  // DOM 对象
  stateNode: any,  
  // 指向自己的父级 Fiber 对象
  return: Fiber | null,
  // 指向自己的第一个子级 Fiber 对象
  child: Fiber | null,
  // 指向自己的下一个兄弟 iber 对象
  sibling: Fiber | null,
}

Fiber 两阶段

Render

构建 Fiber 对象,构建链表,在链表中标记要执行的 DOM 操作 ,可中断。

Commit

根据构建好的链表进行 DOM 操作,不可中断。

参考

https://juejin.cn/post/6993973502852202503

标签:Fiber,DOM,React,任务,requestIdleCallback,原理,执行
From: https://www.cnblogs.com/zjy4fun/p/18450417

相关文章

  • React 中的 diff 算法
    Reactdiff为什么使用虚拟DOM?浏览器在处理DOM的时候会很慢,处理JavaScript会很快,页面复杂的时候,频繁操作DOM会有很大的性能开销(每次数据变化都会引起整个DOM树的重绘和重排)。为了避免频繁操作DOM,React会维护两个虚拟DOM,如果有数据更新,会借此计算出所有修改的状态......
  • [Vue] Reactive note
    <template><div> count:{{count}} </div><div> doubled:{{doubledCount}} </div> <button@click="increase">increase</button></template><scriptsetup>import{computed,ref,......
  • 人工智能前沿研究热点与发展趋势原理与代码实战案例讲解
    人工智能前沿研究热点与发展趋势原理与代码实战案例讲解作者:禅与计算机程序设计艺术/ZenandtheArtofComputerProgramming1.背景介绍1.1问题的由来人工智能(ArtificialIntelligence,AI)作为计算机科学的一个分支,已经取得了长足的进步。从早期的专家系统到现在......
  • 14-恶意代码防范技术原理
    14.1概述1)定义与分类(MaliciousCode)它是一种违背目标系统安全策略的程序代码,会造成目标系统信息泄露、资源滥用,破坏系统的完整性及可用性。它能够经过存储介质或网络进行传播,从一台计算机系统传到另外一台计算机系统,未经授权认证访问或破坏计算机系统。常许多人认为“病毒”......
  • react 知识点汇总(非常全面)
    React是一个用于构建用户界面的JavaScript库,由Facebook开发并维护。它的核心理念是“组件化”,即将用户界面拆分为可重用的组件。React的组件通常使用JSX(JavaScriptXML)。JSX是一种JavaScript语法扩展,允许开发者在JavaScript代码中编写类似HTML的结构。1、初识reac......
  • GATK joint calling的逻辑、原理与优势
    GATK(GenomeAnalysisToolkit)中的jointcalling是一种变异检测策略,它允许同时对多个样本进行变异位点的分析,以提高变异检测的准确性和效率。以下是jointcalling的一些关键原理和优势:数据共享:在jointcalling过程中,信息在所有样本间共享。这意味着如果一个样本在某个位点的......
  • ReentrantLock 实现原理
    文章目录ReentrantLock基本使用可重入锁等待可中断设置超时时间公平锁条件变量ReentrantLock原理加锁流程解锁流程可重入锁原理可打断原理公平锁原理条件变量原理ReentrantLock基本使用在Java中,synchronized和ReentrantLock都是用于确保线程同步的锁,都属于......
  • 13-网络安全漏洞防护技术原理与应用
    13.1概述1)概念网络安全漏洞又称为脆弱性,简称漏洞。漏洞一般是致使网络信息系统安全策略相冲突的缺陷,这种缺陷通常称为安全隐患。安全漏洞的影响主要有机密性受损、完整性破坏、可用性降低、抗抵赖性缺失、可控制性下降、真实性不保等。根据漏洞的补丁状况,可将漏洞分为普通漏......
  • 模型无关的局部解释(LIME)技术原理解析及多领域应用实践
    在当前数据驱动的商业环境中,人工智能(AI)和机器学习(ML)已成为各行业决策制定的关键工具。从金融机构的信贷风险预测到医疗保健提供者的疾病诊断,AI模型正在塑造对生活和业务有深远影响的结果。然而随着这些模型日益复杂化,一个重大挑战浮现:即"黑盒"问题。许多先进的AI模型,尤其是深度学......
  • 12-网络安全审计技术原理与应用
    12.1概述1)概念:指对网络信息系统的安全相关活动信息进行获取、记录、存储、分析和利用的工作。作用:在于建立“事后”安全保障措施,保存网络安全事件及行为信息,为网络安全事件分析提供线索及证据,以便于发现潜在的网络安全威胁行为,开展网络安全风险分析及管理。常见的安全审计功......