当前位置: 首页 > news >正文

前端宝典之六:React源码解析之lane模型

本文主要内容:
介绍lane模型

一、 lane模型

lane模型就是react优先级的机制,可以用来

  • 可以表示优先级的不同
  • 可能同时存在几个同优先级的更新,所以还得能表示批的概念
  • 方便进行优先级相关计算

1、表示优先级不同

lane模型使用31位的二进制表示31条赛道,位数越小的优先级越高,某些相邻的位拥有相同优先级。

export const NoLanes: Lanes = /*                        / 0b0000000000000000000000000000000;
export const NoLane: Lane = /                          / 0b0000000000000000000000000000000;export const SyncLane: Lane = /                        / 0b0000000000000000000000000000001;
export const SyncBatchedLane: Lane = /                 / 0b0000000000000000000000000000010;export const InputDiscreteHydrationLane: Lane = /      / 0b0000000000000000000000000000100;
const InputDiscreteLanes: Lanes = /                    / 0b0000000000000000000000000011000;const InputContinuousHydrationLane: Lane = /           / 0b0000000000000000000000000100000;
const InputContinuousLanes: Lanes = /                  / 0b0000000000000000000000011000000;export const DefaultHydrationLane: Lane = /            / 0b0000000000000000000000100000000;
export const DefaultLanes: Lanes = /                   / 0b0000000000000000000111000000000;const TransitionHydrationLane: Lane = /                / 0b0000000000000000001000000000000;
const TransitionLanes: Lanes = /                       / 0b0000000001111111110000000000000;const RetryLanes: Lanes = /                            / 0b0000011110000000000000000000000;export const SomeRetryLane: Lanes = /                  / 0b0000010000000000000000000000000;export const SelectiveHydrationLane: Lane = /          / 0b0000100000000000000000000000000;const NonIdleLanes = /                                 / 0b0000111111111111111111111111111;export const IdleHydrationLane: Lane = /               / 0b0001000000000000000000000000000;
const IdleLanes: Lanes = /                             / 0b0110000000000000000000000000000;export const OffscreenLane: Lane = /                   */ 0b1000000000000000000000000000000;
同步优先级占用的位数为第一位
export const SyncLane: Lane = /*                        */ 0b0000000000000000000000000000001;

2、 表示“批”的概念

const InputDiscreteLanes: Lanes = /*                    / 0b0000000000000000000000000011000;
export const DefaultLanes: Lanes = /                   / 0b0000000000000000000111000000000;
const TransitionLanes: Lanes = /                       */ 0b0000000001111111110000000000000;

其中的某些变量占了多个位,这就是批
其中InputDiscreteLanes是“用户交互”触发更新会拥有的优先级范围。
DefaultLanes是“请求数据返回后触发更新”拥有的优先级范围。
TransitionLanes是Suspense、useTransition、useDeferredValue拥有的优先级范围。
这其中有个细节,越低优先级的lanes占用的位越多。比如InputDiscreteLanes占了2个位,TransitionLanes占了9个位。
原因在于:越低优先级的更新越容易被打断,导致积压下来,所以需要更多的位。相反,最高优的同步更新的SyncLane不需要多余的lanes

3、 方便进行优先级相关计算

使用位运算符

// 判断a b是否有交集
export function includesSomeLane(a: Lanes | Lane, b: Lanes | Lane) {return (a & b) !== NoLanes;
}// 计算b这个lanes是否是a对应的lanes的子集,只需要判断a与b按位与的结果是否为b:
export function isSubsetOfLanes(set: Lanes, subset: Lanes | Lane) {return (set & subset) === subset;
}// 将两个lane或lanes的位合并只需要执行按位或操作:
export function mergeLanes(a: Lanes | Lane, b: Lanes | Lane): Lanes {return a | b;
}

相关文章:

前端宝典之六:React源码解析之lane模型

本文主要内容: 介绍lane模型 一、 lane模型 lane模型就是react优先级的机制,可以用来 可以表示优先级的不同可能同时存在几个同优先级的更新,所以还得能表示批的概念方便进行优先级相关计算 1、表示优先级不同 lane模型使用31位的二进制…...

邦德咖啡线下门店盛大开业,引领国产健康咖啡新风尚

近日,国内咖啡市场迎来了一股清新的绿色风潮,邦德咖啡线下门店正式拉开帷幕,以其独特的健康理念和创新的产品,誓要成为国产咖啡界的一股强劲力量。 邦德咖啡线下门店以阿卡迪亚绿色为品牌主色调,立志打造国产健康咖啡…...

Elasticsearch + Search UI 构建一个文件搜索引擎

目录 Elasticsearch使用优势App Search Search UI配置engine集中管理配置和提供实用工具函数配置和初始化一个基于Elasticsearch的搜索界面应用程序Search UI 基础用法 好书推荐 Elasticsearch 使用优势 使用ElasticSearch的主要好处在于其强大的全文搜索和实时分析能力。Elas…...

机械学习—零基础学习日志(如何理解概率论2)

全概率公式与贝叶斯公式 上面所提到的公式,可以使用上一篇文章的基本公式推导。 使用到了概率的基本运算公式。 完整的公式展示: 习题练习: 剩余的练习: 第二题解析: 第三题: 第四题: 注意&…...

鸿蒙关于手机全局本地文件读取,写入

一.背景 需求是需要操作用户手机中的文件,不是应用沙箱 二.解决方案 这里要注意的一点拿到fsOpen.path的路径再去进行open文件,因为这里还不知道本地文件路径在哪里,需要选择一下路径再拿到路径去请求 1.这里就是进行两个fs.open&#xf…...

嵌入式企业面试真题

1.C语言中指针数组和数组指针的区别是什么? 答:指针数组是指数组的元素都是指针类型的数组。数组指针是指一个指向数组的指针。指向的是数组第一个元素的地址,每次偏移一个数组的大小。 2.讲一下什么是结构体字节对齐? 答:结构体字节对齐是指当结构体中元素的物理内存大…...

开源一款H5自适应留言表白墙php源码下载

开源一款H5自适应留言表白墙php源码下载,优点就是安装简单,功能实用[滑稽][滑稽] 缺点就是UI简陋,功能稀少 第一张是首页,第二张是查看留言 第三张是留言列表(10秒自动刷新),第四张是表白墙界面...

jmeter引入jar包的三种方式

示例 实现对登录密码进行MD5加密 pom文件依赖 <!-- https://mvnrepository.com/artifact/commons-codec/commons-codec --><dependency><groupId>commons-codec</groupId><artifactId>commons-codec</artifactId><version>1.12&l…...

零基础学习Redis(5) -- redis单线程模型介绍

前面我们提到过&#xff0c;redis是单线程的&#xff0c;这期我们详细介绍一下redis的单线程模型 1. redis单线程模型 redis只使用一个线程处理所有的请求&#xff0c;并不是redis服务器进程内部只有一个线程&#xff0c;其实也存在多个线程&#xff0c;只不过多个线程是在处…...

Android Audio

audio概述&#xff1a; Android Audio知识梳理 看完这一篇就够了&#xff01;-CSDN博客 Android audio篇章&#xff08;1&#xff09;------Audio架构_android audio(1)-CSDN博客 android audio google&#xff1a; 音频 | Android Open Source Project (google.cn) 音频…...

远程MySQL数据库:定义、优势及cPanel的数据库工具

在现代网站和应用程序开发中&#xff0c;数据库是必不可少的核心部分。通常情况下&#xff0c;数据库与网站托管在同一台服务器上&#xff0c;但为了提升性能和安全性&#xff0c;越来越多的用户选择使用远程MySQL数据库。那么&#xff0c;什么是远程MySQL数据库呢&#xff1f;…...

【docker】Dockerfile

Dockerfile是用于构建Docker镜像的文本文件&#xff0c;其中包含一组用于定义镜像构建过程的指令。下面是常见的Dockerfile指令及其解释&#xff1a; FROM&#xff1a;指定基础镜像&#xff0c;用于构建新镜像。COPY&#xff1a;将文件或目录从构建上下文复制到镜像中。ADD&am…...

Redis 的 List 结构非常适合用于实现消息队列php

1. Redis List 结构消息队列简介 Redis 的 List 结构非常适合用于实现消息队列。你可以通过 LPUSH 或 RPUSH 命令将消息推入队列&#xff0c;通过 BLPOP 或 BRPOP 命令从队列中弹出消息。BLPOP 和 BRPOP 命令支持阻塞操作&#xff0c;适合在消费者端等待消息的到来。 2. 实现…...

极速闪存启动:SD与SPI模式的智能初始化指南

最近很多客户朋友在询问我们 CS 创世 SD NAND 能不能使用 SPI 接口&#xff0c;两者使用起来有何区别&#xff0c;下面为大家详细解答。 SD MODE: CS 创世 SD NAND 支持 SD 模式和 SPI 模式&#xff0c;SD NAND 默认为 SD 模式&#xff0c;上电后&#xff0c;其初始化过程如下…...

利用多Lora节省大模型部署成本|得物技术

一、背景 近期&#xff0c;我们在大模型集群的部署过程中遇到了一些挑战。公司有多个业务场景&#xff0c;每个场景都基于自身的数据进行微调&#xff0c;训练出相应的大模型并上线。然而&#xff0c;这些场景的调用量并不高&#xff0c;同时大模型的部署成本较为昂贵&#xf…...

使用SSMS连接和查询 SQL Server 实例

简介 SQL Server Management Studio 是用于管理SQL Server基础架构的集成环境。Management Studio提供用于配置、监视和管理SQL Server实例的工具。 此外&#xff0c;它还提供了用于部署、监视和升级数据层组件(如应用程序使用的数据库和数据仓库)的工具以生成查询和脚本。 官方…...

HarmonyOS Next原生应用开发-从TS到ArkTS的适配规则(十五)

一、不支持for … in 规则&#xff1a;arkts-no-for-in 级别&#xff1a;错误 由于在ArkTS中&#xff0c;对象布局在编译时是确定的、并且不能在运行时被改变&#xff0c;所以不支持使用for … in迭代一个对象的属性。对于数组来说&#xff0c;可以使用常规的for循环。TypeScri…...

两个系统之间跳转免密登录

1、 两个系统之间跳转免密登录_从一个系统跳转到另一个系统,不用再重新登录-CSDN博客 2、 页面跳转统一登录实现_前端从一个系统跳转到其他系统-CSDN博客...

SQL基础——MySQL的触发器、存储引擎、事务

简介&#xff1a;个人学习分享&#xff0c;如有错误&#xff0c;欢迎批评指正。 一、MySQL的触发器 1.概述 介绍 触发器&#xff0c;就是一种特殊的存储过程。触发器和存储过程一样是一个能够完成特定功能、存储在数据库服务器上的SQL片段&#xff0c;但是触发器无需调用&…...

目标检测算法:对比YOLOv3、YOLOv5、YOLOv8

目标检测 YOLOv3 数据处理 可输入任意大小的图片&#xff08;特征图大小最好是32倍数&#xff09;Anchor&#xff1a;K-Means聚类IOUNMS 模型结构 Backbone Darknet53 无最大池化&#xff0c;步长2卷积层进行下采样每个Conv后 BN LeakyReLU引入残差结构中间层和某一层上…...

美国不断自我革新的历史,为这个国家面对充满巨大机遇却又充满不确定性的未来提供了引人深思的经验教训

https://www.mckinsey.com/mgi/our-research/At-250-sustaining-Americas-competitive-edge 美国不断自我革新的历史&#xff0c;为这个国家面对充满巨大机遇却又充满不确定性的未来提供了引人深思的经验教训 这一切始于一场惊天动地的反抗行动。 1776年7月&#xff0c;来自13…...

别再乱装CUDA了!用Anaconda为你的3060 Ti一键搞定PyTorch GPU环境(含CUDA 11.3实战)

3060 Ti显卡玩家的PyTorch环境配置指南&#xff1a;用Anaconda避开CUDA版本地狱 在深度学习领域&#xff0c;GPU加速已经成为提升模型训练效率的标配。然而&#xff0c;对于许多刚入门的开发者来说&#xff0c;配置PyTorch的GPU支持往往成为第一道门槛——尤其是当涉及到CUDA版…...

Altium Designer实战:用xSignals搞定DDR4内存的等长布线,告别时序烦恼

Altium Designer实战&#xff1a;用xSignals实现DDR4内存精准等长布线 在高速PCB设计中&#xff0c;DDR4内存接口的布线一直是硬件工程师面临的技术高地。当信号速率突破2400MHz时&#xff0c;地址、命令与数据线之间哪怕几个ps的时序偏差都可能导致系统不稳定。传统手工计算网…...

NS-USBLoader:Switch游戏管理终极指南 - 如何实现一键安装与系统引导?

NS-USBLoader&#xff1a;Switch游戏管理终极指南 - 如何实现一键安装与系统引导&#xff1f; 【免费下载链接】ns-usbloader Awoo Installer and GoldLeaf uploader of the NSPs (and other files), RCM payload injector, application for split/merge files. 项目地址: ht…...

从零到一:基于GD32E230核心板的PCB设计实战与模块化解析

1. GD32E230核心板硬件设计基础 第一次拿到GD32E230这颗国产MCU时&#xff0c;说实话有点小激动。作为兆易创新基于Cortex-M23内核的拳头产品&#xff0c;它用55nm工艺把芯片面积压缩到了惊人的3x3mm&#xff0c;却集成了5个定时器、2个SPI、2个I2C这些实用外设。我在去年一个智…...

Onekey:重构Steam Depot清单下载流程的现代化解决方案

Onekey&#xff1a;重构Steam Depot清单下载流程的现代化解决方案 【免费下载链接】Onekey Onekey Steam Depot Manifest Downloader 项目地址: https://gitcode.com/gh_mirrors/one/Onekey Onekey作为一款专为Steam Depot清单设计的自动化下载工具&#xff0c;通过其创…...

MySQL 视图使用场景与限制

视图是把查询封装成「虚拟表」的方式&#xff0c;用对了简化查询&#xff0c;用错了性能爆炸。这篇说说视图的用法和注意事项。 什么是视图&#xff1f; -- 视图&#xff1a;保存好的 SQL 查询&#xff0c;像表一样使用 CREATE VIEW view_name AS SELECT column1, column2 FROM…...

从零构建情感大语言模型:基于EmoLLM的实践指南

1. 项目概述&#xff1a;当大语言模型学会“察言观色”最近在折腾一个挺有意思的开源项目&#xff0c;叫SmartFlowAI/EmoLLM。光看名字你可能就猜到了&#xff0c;这玩意儿跟“情绪”和“大语言模型”有关。没错&#xff0c;它的核心目标就是让冷冰冰的LLM&#xff08;Large La…...

终极指南:如何为你的Mac鼠标安装强大定制功能

终极指南&#xff1a;如何为你的Mac鼠标安装强大定制功能 【免费下载链接】mac-mouse-fix Mac Mouse Fix - Make Your $10 Mouse Better Than an Apple Trackpad! 项目地址: https://gitcode.com/GitHub_Trending/ma/mac-mouse-fix Mac Mouse Fix是一款革命性的开源工具…...

树莓派机械爪项目实战:从硬件连接到Python控制全解析

1. 项目概述&#xff1a;当树莓派遇上机械爪最近在折腾一个挺有意思的小项目&#xff0c;叫Demwunz/openclaw-pi-installation。光看这个名字&#xff0c;就能猜到个大概&#xff1a;这是一个为树莓派&#xff08;Raspberry Pi&#xff09;准备的机械爪&#xff08;Claw&#x…...