东莞万江网站制作台州网站搜索优化

diannao/2026/1/19 14:18:48/文章来源:
东莞万江网站制作,台州网站搜索优化,html5标准网站建设,网页设计代码简单优先级类型 React内部对于优先级的管理#xff0c;贯穿运作流程的4个阶段#xff08;从输入到输出#xff09;#xff0c;根据其功能的不同#xff0c;可以分为3种类型#xff1a; 1 #xff09;fiber优先级(LanePriority) 位于 react-reconciler包#xff0c;也就是L…优先级类型 React内部对于优先级的管理贯穿运作流程的4个阶段从输入到输出根据其功能的不同可以分为3种类型 1 fiber优先级(LanePriority) 位于 react-reconciler包也就是Lane(车道模型) 2 调度优先级(SchedulerPriority) 位于scheduler包 3 优先级等级(ReactPriorityLevel) 位于react-reconciler包中的 SchedulerWithReactIntegration.js负责上述2套优先级体系的转换. Lane 是在 react17.0.0的新特性. Lane(车道模型) 英文单词lane翻译成中文表示车道航道的意思所以很多文章都将Lanes模型称为车道模型 Lane模型的源码在 ReactFiberLane.js,源码中大量使用了位运算 首先引入对Lane的解释, 这里简单概括如下 1 Lane类型被定义为二进制变量利用了位掩码的特性在频繁运算的时候占用内存少计算速度快. Lane和Lanes就是单数和复数的关系代表单个任务的定义为Lane,代表多个任务的定义为Lanes 2 Lane是对于expirationTime的重构以前使用expirationTime表示的字段都改为了lanerenderExpirationTime - renderlanes update.expirationTime - update.lane fiber.expirationTime - fiber.lanes fiber.childExpirationTime - fiber.childLanes root.firstPendingTime and root.lastPendingTime - fiber.pendingLanes3 使用Lanes模型相比expirationTime模型的优势 Lanes把任务优先级从批量任务中分离出来可以更方便的判断单个任务与批量任务的优先级是否重叠 // 判断单task与batchTask的优先级是否重叠 // 1.通过expirationTime判断 const isTaskIncludedInBatch priorityOfTask priorityOfBatch; // 2.通过Lanes判断 const isTaskIncludedInBatch (task batchOfTasks) ! 0;// 当同时处理一组任务该组内有多个任务且每个任务的优先级不一致 // 1. 如果通过expirationTime判断需要维护一个范围在Lane重构之前源码中就是这样比较的 const isTaskIncludedInBatch taskPriority highestPriorityInRange taskPriority lowestPriorityInRange; // 2. 通过Lanes判断 const isTaskIncludedInBatch (task batchOfTasks) ! 0;Lanes使用单个32位二进制变量即可代表多个不同的任务 也就是说一个变量即可代表一个组(group) 如果要在一个group中分离出单个task,非常容易 在expirationTime模型设计之初react体系中还没有 Suspense 异步渲染的概念 现在有如下场景有3个任务其优先级ABC,正常来讲只需要按照优先级顺序执行就可以了 但是现在情况变了A和C任务是CPU密集型而B是IO密集型(Suspense会调用远程api,算是IO任务) 即A(cpu)B(IO)C(cpu).此时的需求需要将任务B从group中分离出来先处理cpu任务A和C //从group中删除或增加task// 通过expirationTime实现 // 维护一个链表按照单个task的优先级顺序进行插入 // 删除单个task(从链表中删除一个元素) task. prev.next task.next; //2增加单个task(需要对比当前task的优先级插入到链表正确的位置上) let current queue; while (task.expirationTime current.expirationTime) {current current.next; } task.next current.next; current.next task; //3比较task是否在group中 const isTaskIncludedInBatch taskPriority highestPriorityInRange taskPriority lowestPriorityInRang; //2.通过Lanes实现 //1)删除单个task batchOfTasks ~task; //2增加单个task batchOfTasks | task; //3比较task是否在group中 const isTaskIncludedInBatch (task batchOfTasks) ! 0;Lanes是一个不透明的类型只能在ReactFiberLane.js这个模块中维护 如果要在其他文件中使用只能通过 ReactFiberLane.js 中提供的工具函数来使用 分析车道模型的源码(ReactFiberLane.js中)可以得到如下结论 1.可以使用的比特位一共有31位2.共定义了18种车道(Lane/Lanes)变量每一个变量占有1个或多个比特位分别定义为Lane和Lanes类型.3.每一种车道(Lane/Lanes)都有对应的优先级所以源码中定义了18种优先级(LanePriority).4.占有低位比特位的Lane变量对应的优先级越高 最高优先级为 SynclanePriority 对应的车道为 Synclane 0b0000000000000000000000000000001 最低优先级为 OffscreenLanePriority 对应的车道为 OffscreenLane 0b1000000000000000000000000000000 位运算 什么是位运算程序中的所有数在计算机内存中都是以二进制的形式储存的。 位运算就是直接对整数在内存中的二进制位进行操作。 比如 0 在二进制中用 0 表示我们用 0000 代表1 在二进制中用 1 表示我们用 0001 代表 那么先看两个位运算符号 和 | 对于每一个比特位两个操作数都为 1 时结果为 1否则为 0| 对于每一个比特位两个操作数都为0时结果为 0否则为 1我们看一下两个 1 0 和 1 | 0如上 1 0 0, 1 | 0 1 参考 0 00001 0001-------------0 1 0000 0再参考 0 0000 1 0001 ---------------- 0 | 1 0001 1使用一张表格详细说明 运算符用法描述与 a b如果两位都是1则设置每位为1或 | a | b 如果两位之一为1则设置每位为1异或 ^a^b如果两位只有一位为1则设置每位为1非 ~~ a反转操作数的比特位, 即0变成1, 1变成0左移()a b 将a的二进制形式向左移b( 32)比特位, 右边用0填充 有符号右移()ab将a的二进制形式向右移b(32)比特位丢弃被移除的位左侧以最高位来填充无符号右移()ab将a的二进制形式向右移b(32)比特位丢弃被移除的位并用0在左侧填充 位运算的一个使用场景 比如有一个场景下会有很多状态常量A,B,C…,这些状态在整个应用中在一些关键节点中做流程控制比如if(value A) {// TODO.. }如上判断value等于常量A,那么进入到if的条件语句中此时是value属性是简单的一对一关系但是实际场景下value可能是好几个枚举常量的集合也就是一对多的关系那么此时value可能同时代表A和B两个属性如下图所示 这时候如果按照下面的代码来写就会很麻烦if(value A || value B) {// TODO.. }此时的问题就是如何用一个value表示A和B两个属性的集合这个时候位运算就派上用场了因为可以把一些状态常量用32位的二进制来表示这里也可以用其他进制比如const A 0b0000000000000000000000000000001 // 优先级最高 const B 0b0000000000000000000000000000010 const C 0b0000000000000000000000000000100 // 优先级最低通过移位的方式让每一个常量都单独占一位这样在判断一个属性是否包含常量的时候可以根据当前位数的1和0来判断这样如果一个值即代表A又代表B那么就可以通过位运算的 | 来处理就有 AB A | B 0b0000000000000000000000000000011那么如果把AB的值赋予给value,那么此时的value就可以用来代表A和B此时当然不能直接通过等于或者恒等来判断value是否为A或者B,此时就可以通过来判断。具体实现如下const A 0b0000000000000000000000000000001 const B 0b0000000000000000000000000000010 const C 0b0000000000000000000000000000100 const N 0b0000000000000000000000000000000 const value A | B console.log((value A ) ! N) // true console.log((value B ) ! N) // true console.log((value C ) ! N ) // false位运算在 react 中的应用 export const NoLanes /* */ 0b0000000000000000000000000000000; const SyncLane /* */ 0b0000000000000000000000000000001;const InputContinuousHydrationLane /* */ 0b0000000000000000000000000000010; const InputContinuousLane /* */ 0b0000000000000000000000000000100;const DefaultHydrationLane /* */ 0b0000000000000000000000000001000; const DefaultLane /* */ 0b0000000000000000000000000010000;const TransitionHydrationLane /* */ 0b0000000000000000000000000100000; const TransitionLane /* */ 0b0000000000000000000000001000000;如上 SyncLane 代表的数值是1它却是最高的优先级 也即是说lane的代表的数值越小此次更新的优先级就越大 在新版本的React中还有一个新特性就是render阶段可能被中断在这个期间会产生一个更高优先级的任务 那么会再次更新lane属性这样多个更新就会合并这样一个lane可能需要表现出多个更新优先级 我们来看一下React是如何通过位运算分离出优先级的 function getHighestPriorityLane(lanes) {return lanes -lanes; }如上就是通过 lanes -lanes 分离出最高优先级的任务的我们来看一下具体的流程 比如SyncLane和InputContinuousLane合并之后的任务优先级lane为SyncLane 0b0000000000000000000000000000001InputContinuousLane 0b0000000000000000000000000000100lane SyncLane|InputContinuousLanelane 0b0000000000000000000000000000101那么通过 lanes -lanes 分离出 SyncLane首先我们看一下 -lanes,在二进制中需要用补码表示为-lane 0b1111111111111111111111111111011那么接下来执行 lanes -lanes 看一下 的逻辑是如果两位都是1则设置改位为1否则为0那么 lane -lane, 只有一位最后一位全是1所有合并后的内容为lane -lane 0b0000000000000000000000000000001 可以看得出来lane-lane的结果是SyncLane,所以通过lane-lane就能分离出最高优先级的任务 const SyncLane 0b0000000000000000000000000000001 const InputContinuousLane 0b0000000000000000000000000000100 const lane SyncLane | InputContinuousLane console.log((lane -lane) SyncLane ) // true

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/90319.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

免费做图片的网站有哪些网站建设风格

原文在简书首发:http://www.jianshu.com/p/badf412db4e7lua-cmsgpack是一个开源的MessagePack实现方式、纯C的库,没有任何其它依赖,编译后可以直接被lua调用,目前主要支持Lua5.1/5.2/5.3 版本。1、什么是MessagePack?-…

高端网站定制站广西网站建设渠道

目录 一、前言 二、代码 一、前言 有些时候我们需要开启或暂停一些服务,比如说开启Apach或暂停MySQL服务等,最近工作中也开发了这方面的功能,记录下来怎样使用PHP语言来开启或暂停Apache、MySQL服务的运行状态。 这种方法也适用其他服务。…

淘客网站备案wordpress能开发商城网站吗

1. 元件基本介绍 2. 基础元件的使用 3. 表单型元件的使用 4. 菜单与表格元件的使用 使用:如果想使用某个元件,我们只需要将它从元件库中拖入画布摆放即可。 - 对齐:默认情况下,两个矩形元件并排摆放,中间的边框为两…

ps制作网站背景邹城网站定制

一个三电源切换电路 电路描述 1、Q1、Q2为NMOS,Q3、Q4和Q5为PMOS管,D1为二极管。 2、BAT1和BAT2为电池,BAT2的容量比BAT1大,VIN_5V为外部电源,VOUT为输出,给系统供电。 3、VOUT会从优先级高的电源取电&a…

重庆专业企业建设网站网络营销方案范文3篇

原文链接&#xff1a;https://blazor-university.com/components/capturing-unexpected-parameters/捕获意外参数源代码[1]之前我们已经看到了如何使用特定名称声明参数和级联参数。例如&#xff0c;一个将 <img> 元素包装在一些自定义 HTML 中的自定义组件。<div cla…

企业官方网站如何做蓝v认证上海住房和城乡建设局网站

111转载于:https://www.cnblogs.com/zoeeying/p/10139131.html

自助建站的一般流程西安旅游攻略必去景点

宝塔一键修改mysql数据库存放路径&#xff0c;更改默认数据目录脚本&#xff01;该shell脚本仅限于宝塔bt.cn linux面板使用&#xff0c;希望对有需要的朋友有所帮助&#xff0c;如有问题请留言&#xff01;主要参数功能:1.默认修改数据库存放路径sh mysql_Transfer.sh2.还原数…

郑州做网站外包的公司十堰吧

在 Linux 中开启 Flask 项目持续运行 在部署 Flask 项目时&#xff0c;情况往往并不是那么理想。默认情况下&#xff0c;关闭 SSH 终端后&#xff0c;Flask 服务就停止了。这时&#xff0c;您需要找到一种方法在 Linux 服务器上实现持续运行 Flask 项目&#xff0c;并在服务器…

网站编排百度热度榜搜索趋势

在 CMake 中&#xff0c;target_include_directories 命令用于向特定目标&#xff08;如可执行文件或库&#xff09;添加包含目录&#xff0c;以便编译器能够找到特定目标所需的头文件。 基本语法 target_include_directories(target_name[SYSTEM] [BEFORE]directory1[direct…

珠海做网站公司有哪些wordpress 删除demo

一、前言 上周工作遇到了一个需求&#xff0c;同步多个省份销号数据&#xff0c;解绑微信粉丝。分省定时将销号数据放到SFTP服务器上&#xff0c;我需要开发定时任务去解析文件。因为是多省份&#xff0c;服务器、文件名规则、数据规则都不一定&#xff0c;所以要做成可配置是有…

天梭手表官方网站word怎么做网页

schoolcms // 版本信息 const THINK_VERSION 3.2.3; ThinkPHP3.2完全开发手册 http://document.thinkphp.cn/manual_3_2.html

做网站需要绑定电脑ip吗中信建设四川分公司招聘

一、缩短访问路径 1、如图访问该文件路径 没有缩短之前&#xff0c;访问的路径是 http://localhost/zerg_new/public/index.php/api/v1/banner/1 缩短后&#xff0c;访问的路径是 http://z_new.cn/api/v1/banner/1 2、缩短路径步骤 本机apache配置&#xff0c;小编使用的…

邢台网站制作哪里有建设完网站成功后需要注意什么

锯齿形斜纹组织图&#xff1a; 分析&#xff1a; 前半齿长度k&#xff0c;表示山谷到山峰的列数&#xff0c;也就是锯齿的宽度&#xff1b; 锯齿飞数s&#xff0c;表示山峰到山峰的行数&#xff0c;也就是锯齿的高度。 起始点相差4格&#xff0c;也就是第一部分整体向上移动…

企业网站seo手机南京网站建设与维护

什么叫静态链表&#xff1f;——用顺序表模拟链表&#xff0c;就叫做静态链表 第一列相当于数据域data&#xff0c;第二列相当于指针域next&#xff0c; 第一行&#xff08;0&#xff09;相当于头结点&#xff08;头结点的数据域不放数据&#xff09; &#xff08;a&#xff…

南昌网站建设模板技术公司注册免费

openai用tf实现的真的看不懂&#xff0c;大佬的世界… PPO的详细细节 1. 奖励模型和策略的价值头将 query 和 response 的连接作为输入 奖励模型和策略的价值头 不 仅仅查看响应。相反&#xff0c;它将 query 和 response 连接在一起&#xff0c;作为 query_response def ge…

模板建站可以做优化吗抚顺建设银行网站

正题 题目链接:https://www.luogu.org/problemnew/show/P3100 题目大意 一个空矩阵&#xff0c;每次可以将B∗BB*BB∗B的矩阵覆盖为RRR或者BBB。 求BBB最大是多少使得可以覆盖使得原矩阵成为目标矩阵。 解题思路 我们考虑贪心&#xff0c;先分析一下性质。 假设答案为kkk&…

大型门户网站建设企业佛山微商网站建设

leetcode-剑指offer-321.面试题22-链表中的倒数第k个节点22.面试题24-反转链表23.面试题25-合并两个排序链表-递归24.面试题26-树的子结构25.面试题27-二叉树的镜像26.面试题28-对称二叉树27.面试题29-顺时针打印矩阵28.面试题30-包含min函数的栈29.面试题31-栈的押入&#xff…

如何丰富网站内容金种子酒业网站建设

目录 1 Display Widgets简介 2 如何使用Display Widgets部件 2.1 QLabel组件-显示图像或文本 2.2 QCalendarWidget组件-日历简单的使用 2.3 QLCDNumber组件-控件作时钟的显示 2.4 QProgressBar组件-模拟手机电池充电 2.5 QFrame组件-绘制水平/垂直线 Display Widgets将分…

做网站为什么很复杂机械外贸网站建设

任务五十一: 压缩包文件暴力破解 任务环境说明:Server2005 1. 通过本地PC中渗透测试平台Kali使用Nmap扫描目标靶机服务版本信息,将 Telnet 版本信息字符串 作为 Flag 提交; flag:Microsoft Windows XP telnetd 2. 通过本地PC中渗透测试平台Kali对服务器场景Windows进行渗透测…

咋做黄页网站聊城网站建设公司

docker小白第五天 docker的私有库 有些涉密的信息代码不能放在阿里云的镜像仓库&#xff0c;因此需要构建一个个人内网专属的私有库&#xff0c;将镜像或者容器代码进行推送保存。 下载镜像docker registry 执行代码docker pull registry&#xff0c;用于搭建私服前的准备。…