React是如何利用堆进行任务调度的?

简介: React利用堆进行任务调度

网络异常,图片无法展示
|


最近一直在做 LeetCode 题解的相关输出,


有的小伙伴可能会有疑惑,学了算法后,在前端中有哪些地方用到了算法呢?


今天我们就来聊一聊 React 中是如何利用堆维护任务队列的。


业务场景


React 中有很多任务,


例如 用户点击、用户输入以及 setState 等等,而这些任务又有优先级的区分。


比如用户的点击和输入,肯定是高优先级任务,要优先响应,


load 以及 animation 事件的优先级肯定要低一些。


如果队列中有了一些低优先级任务,此时新进来的高优先级任务就要插队执行,那么 React 是如何管理这些任务的呢?


源码地址


React 源码中有目录 packages/scheduler,该目录就是 React 任务调度模块相关。


该目录 src


Scheduler.js 实现了任务调度相关逻辑


SchedulerMinHeap.js 实现了堆


小顶堆任务调度


React 会有一系列规则定义每个任务的优先级,最后的表现就是 React 会将每个任务包装为一个任务对象 newTask 319行,该对象会存在两个属性 idsortIndex


其中 sortIndex 标识当前任务的优先级, id 标识每个任务的先后顺序。


React 中存放任务的数组 taskQueue 会被模拟为一个小顶堆,


该小顶堆的 compare 逻辑是优先比较 sortIndex(即任务的优先级),


如果 sortIndex 相同,则比较 id(即任务创建的先后顺序)。


因为堆的性质是维护一个最值在堆顶,所以每次堆顶任务(对应任务数组中的第一个元素)就是当前任务队列中优先级最高的任务,这样只需要每次获取堆顶任务执行即可。


堆顶任务取出之后,只需要对小顶堆进行弹堆操作后自上向下的平衡调整,则堆顶又维护了当前任务队列中优先级最高的任务。


这样通过堆维护任务队列,每次获取优先级最高的任务的时间复杂度是 O(1) 的,插入和弹出操作后的平衡调整时间复杂度是 O(logn)的,整体是非常高效的。


end


以上就是堆在 React 任务调度中的应用,你学会了吗?

相关文章
|
3月前
|
存储 前端开发 JavaScript
深入理解React Fiber架构及其性能优化
【10月更文挑战第5天】深入理解React Fiber架构及其性能优化
139 1
|
4月前
|
存储 移动开发 前端开发
探秘react,一文弄懂react的基本使用和高级特性
该文章全面介绍了React的基本使用方法与高级特性,包括JSX语法、组件化设计、状态管理、生命周期方法、Hooks使用、性能优化策略等内容,并探讨了Redux和React Router在项目中的集成与应用。
探秘react,一文弄懂react的基本使用和高级特性
|
5月前
|
前端开发 JavaScript 数据处理
如何学习React的高级概念?
【8月更文挑战第26天】如何学习React的高级概念?
46 2
|
5月前
|
缓存 JavaScript 前端开发
【React生态进阶】React与Redux完美结合:从原理到实践全面解析构建大规模应用的最佳策略与技巧分享!
【8月更文挑战第31天】React 与 Redux 的结合解决了复杂状态管理的问题,提升了应用性能。本文详细介绍了在 React 应用中引入 Redux 的原因、步骤及最佳实践,包括安装配置、状态管理、性能优化等多方面内容,并提供了代码示例,帮助你构建高性能、易维护的大规模应用。
88 0
|
6月前
|
前端开发
React Hooks实战技巧:提升你的组件开发效率
【7月更文挑战第16天】React Hooks为React开发带来了革命性的变化,使得函数式组件更加强大和灵活。通过掌握上述实战技巧,你可以更高效地编写清晰、可维护和可复用的React组件。希望这些技巧能帮助你在React开发之路上走得更远。
|
8月前
|
设计模式 前端开发 JavaScript
框架分析(2)-React
框架分析(2)-React
|
前端开发
前端学习笔记202307学习笔记第五十九天-react源码-Fiber数据结构介绍2
前端学习笔记202307学习笔记第五十九天-react源码-Fiber数据结构介绍2
62 0
|
8月前
|
存储 开发框架 前端开发
深入探索React:构建动态、交互式前端应用的终极指南
深入探索React:构建动态、交互式前端应用的终极指南
238 0
|
8月前
|
存储 前端开发 JavaScript
React 性能优化终章,成为顶尖高手的最后一步
React 性能优化终章,成为顶尖高手的最后一步
|
8月前
|
缓存 前端开发 架构师
理解这个机制,是成为React性能优化高手的关键
理解这个机制,是成为React性能优化高手的关键