首页 > 其他分享 >react 之 fiber 架构

react 之 fiber 架构

时间:2024-10-05 11:44:00浏览次数:6  
标签:fiber 浏览器 react 任务 架构 port2 port1

一、为什么要用 fiber架构

 在react16 之前,react是用 diff 算法对vitrulDom进行对比更新渲染,这种 diff 算法对比 如果遇到需要大量时间执行的方法任务时,就会造成页面卡顿

二、什么是 fiber 架构

 fiber架构简单点说就是 任务切片(一个耗时任务在浏览器空闲时,分多次执行),这样就在用户感官上页面流畅不卡顿

浏览器卡顿判断标准:

 正常情况下人眼感受到的 每秒 60帧,也就是16.6ms/帧,如果超过超过这个值,就会感受到卡顿,如果说某个任务耗时超过16.6ms就会造成页面暂时卡顿

fiber怎么做:

  fiber 架构会把一个要耗时任务会分解成无数个执行只需大概5ms的任务片段,在浏览器空闲时执行

如何判断浏览器是否空闲:

  浏览器有个API叫  requestIdleCallback 

 requestIdleCallback回调函数: 回调函数是在主线程空闲时被调用的函数。每次调用时,都会传入一个IdleDeadline对象,该对象提供一个timeRemaining()方     法,用来检测当前帧中剩余的空闲时间。

注意:requestIdleCallback 是一个宏任务,在事件列表中是最后执行的

but!!!react 并没有使用浏览器原生的 requestIdleCallback 方法(因为浏览器兼容,目前只要chorm支持)

react 而是用了  MessageChannel 进行任务调度

什么是 MessageChannel?

MessageChanne设计初衷是为了方便 我们在不同的上下文之间进行通讯,例如web Worker,iframe
它提供了两个端口(port1 和 port2),通过这些端口,消息可以在两个独立的线程之间双向传递

 

const channel = new MessageChannel();
const port1 = channel.port1;
const port2 = channel.port2;

// 设置 port1 的消息处理函数
port1.onmessage = (event) => {
    console.log('Received by port1:', event.data);
    port1.postMessage('Reply from port1'); // 向 port2 发送回复消息
};

// 设置 port2 的消息处理函数
port2.onmessage = (event) => {
    console.log('Received by port2:', event.data);
};

// 通过 port2 发送消息给 port1
port2.postMessage('Message from port2');

 

 

react 是实现是复杂的,他要设计任务执行优先级(优先级设计包含过期时间、是否用户操作、组件优先级等)

 

三、fiber 如何中断任务

 fiber 分片任务执行的两个阶段:

1、调度:任务中断可以在调度阶段进行

2、提交:提交阶段任务不能中断

标签:fiber,浏览器,react,任务,架构,port2,port1
From: https://www.cnblogs.com/xxflz/p/18447732

相关文章

  • 全面图解Docker架构设计:掌握Docker全链路思维/实战/优化(小白到大师篇[2])
    Docker是一个革命性的开放平台,用于开发、交付和运行应用程序。通过使用Docker,开发者可以打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何支持Docker的环境中,在不同环境中实现一致的运行。无论是在虚拟机、物理服务器、数据中心还是云平台,Docker......
  • 03 掌握Docker核心架构:镜像、仓库、容器及运行管理的深度解析
    文章目录03掌握Docker核心架构:镜像、仓库、容器及运行管理的深度解析一概述1.1镜像1.2镜像仓库1.3容器二、镜像及镜像仓库2.1本地镜像仓库2.2镜像仓库简介2.3使用远端仓库2.3.1从远端镜像仓库拉取apache镜像2.3.2从远端镜像仓库拉取指定......
  • 读数据湖仓04数据架构与数据工程
    1. 大容量存储器1.1. 几乎是到最后时刻,大容量存储器才被引入基础数据的基础设施中1.1.1. 分析人员通常不会直接在大容量存储器中进行数据分析1.1.2. 大容量存储器在基础数据中扮演的角色也特别重要,它能够在许多方面支持数据分析人员自由灵活地完成工作,也为数据湖仓的......
  • React-测试驱动开发教程-全-
    React测试驱动开发教程(全)原文:Test-DrivenDevelopmentwithReact协议:CCBY-NC-SA4.0一、测试驱动开发的简短历史我写这一章的意图不是复制和粘贴博客中的陈词滥调(下面的摘录除外),或者假装我是历史事件的一部分(比如敏捷宣言或极限编程活动),这些事件导致了测试驱动开发......
  • ReactNative-IOS-开发教程-全-
    ReactNativeIOS开发教程(全)原文:ReactnativeforiOSdevelopment协议:CCBY-NC-SA4.0一、学习基础:React的短暂停留之旅“千里之行始于足下。”—老子在开始ReactNative之旅之前,您必须对React(也称为ReactJS或React.js)有所了解。在本章中,您将快速了解React的核......
  • React-入门指南-全-
    React入门指南(全)原文:IntroductiontoReact协议:CCBY-NC-SA4.0一、什么是React?ElectronicsupplementarymaterialTheonlineversionofthischapter(doi:10.​1007/​978-1-4842-1245-5_​1)containssupplementarymaterial,whichisavailabletoauthorizedus......
  • 系统架构 - AxureMost
    系统架构-AxureMostAxureMost官网系统架构-AxureMost系统架构图的分层可以有不同的模型,但一个常见的五层架构包括:1、表示层(PresentationLayer)或用户界面层:功能:直接与用户交互,提供图形界面或API接口,负责数据的展示和用户输入的收集。组成:包括Web前端、移动应用界面、......
  • 玄武星辰大阵——软件终端架构思维———未来之窗行业应用跨平台架构
    一、创生-玄武星辰大阵随着互联网的高速发展,企业的数字化进程不断加速,每个公司所涉及的业务日益繁多。少则数种,多则上千种,业务的复杂性催生了庞大而庞杂的系统。在这些系统中,重复功能屡见不鲜,重复的系统架构比比皆是。这不仅给维护工作带来了极大的挑战,也导致了大量的重复劳动......
  • 清华大学、腾讯联合推全开源多模态架构Oryx 支持超长视频输入
    在人工智能快速发展的今天,一个名为ORYX的多模态大型语言模型正在悄然改变我们对AI理解视觉世界能力的认知。这个由清华大学、腾讯和南洋理工大学研究人员联合开发的AI系统,堪称视觉处理领域的"变形金刚"。ORYX,全称OryxMulti-ModalLargeLanguageModels,是一个专门设计用于......
  • 掌握RocketMQ消息中间件——基本概念和系统架构篇
    简述RcoketMQ概念:RocketMQ是一个开源的分布式消息中间件,由阿里巴巴开发并贡献给Apache软件基金会。它用于处理高吞吐量、低延迟的消息传递,并广泛应用于现代分布式系统中。1 基本概念1.1消息 (Message)    概念:消息是信息传递的物理载体,生产和消费数据的最小单位,......