当前位置: 首页 > 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;
}
http://www.lryc.cn/news/428425.html

相关文章:

  • 邦德咖啡线下门店盛大开业,引领国产健康咖啡新风尚
  • Elasticsearch + Search UI 构建一个文件搜索引擎
  • 机械学习—零基础学习日志(如何理解概率论2)
  • 鸿蒙关于手机全局本地文件读取,写入
  • 嵌入式企业面试真题
  • 开源一款H5自适应留言表白墙php源码下载
  • jmeter引入jar包的三种方式
  • 零基础学习Redis(5) -- redis单线程模型介绍
  • Android Audio
  • 远程MySQL数据库:定义、优势及cPanel的数据库工具
  • 【docker】Dockerfile
  • Redis 的 List 结构非常适合用于实现消息队列php
  • 极速闪存启动:SD与SPI模式的智能初始化指南
  • 利用多Lora节省大模型部署成本|得物技术
  • 使用SSMS连接和查询 SQL Server 实例
  • HarmonyOS Next原生应用开发-从TS到ArkTS的适配规则(十五)
  • 两个系统之间跳转免密登录
  • SQL基础——MySQL的触发器、存储引擎、事务
  • 目标检测算法:对比YOLOv3、YOLOv5、YOLOv8
  • C# 属性(Property)
  • 3. 数据结构——栈的操作实现
  • EmguCV学习笔记 VB.Net 4.5 像素距离和连通区域
  • 使用spring boot开发与直接开发一个web项目的区别
  • Leetcode JAVA刷刷站(48)旋转图像
  • 编译型语言和解释型语言
  • TensorRT 和 PyTorch区别
  • iOS 17.6.1版本重发,修复高级数据保护错误
  • 【排序算法】八大排序(上)(c语言实现)(附源码)
  • Python版《超级玛丽+源码》-Python制作超级玛丽游戏
  • 互联网私有IP地址列表