React调度(Scheduler)原理如何深入理解才能透彻掌握?

2026-03-31 16:160阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1832个文字,预计阅读时间需要8分钟。

React调度(Scheduler)原理如何深入理解才能透彻掌握?

目录+异步调度+时间切片+异步调度原理+总结+问题:针对大型React应用,可能会存在一次更新,递归遍历大量虚拟DOM,造成占用js线程,使浏览器没有时间去做一些动作。

目录
  • 异步调度
  • 时间分片
  • 异步调度原理
  • 总结

异步调度

问题:由于对于大型的 React 应用,会存在一次更新,递归遍历大量的虚拟 DOM ,造成占用 js 线程,使得浏览器没有时间去做一些动画效果,伴随项目越来越大,项目会越来越卡。

对比Vue:

Vue 有这 template 模版收集依赖的过程,轻松构建响应式,使得在一次更新中,Vue 能够迅速响应,找到需要更新的范围,然后以组件粒度更新组件,渲染视图。

React 中,一次更新 React 无法知道此次更新的波及范围,所以 React 选择从根节点开始 diff ,查找不同,更新这些不同。

解决:

把 React 的更新,交给浏览器自己控制,浏览器先执行绘制任务,空闲时间执行更新任务,解决了卡顿问题。即采用异步调度的方法。

时间分片

React让浏览器控制React更新:浏览器每执行一次事件循环都会:处理事件,执行 js,调用requestAnimation,布局 Layout,绘制 Paint,在一次执行后,浏览器进入空闲时,可以执行更新任务

谷歌浏览器提供的一个 API, 在浏览器有空余的时间,浏览器就会调用 requestIdleCallback 的回调。

阅读全文

本文共计1832个文字,预计阅读时间需要8分钟。

React调度(Scheduler)原理如何深入理解才能透彻掌握?

目录+异步调度+时间切片+异步调度原理+总结+问题:针对大型React应用,可能会存在一次更新,递归遍历大量虚拟DOM,造成占用js线程,使浏览器没有时间去做一些动作。

目录
  • 异步调度
  • 时间分片
  • 异步调度原理
  • 总结

异步调度

问题:由于对于大型的 React 应用,会存在一次更新,递归遍历大量的虚拟 DOM ,造成占用 js 线程,使得浏览器没有时间去做一些动画效果,伴随项目越来越大,项目会越来越卡。

对比Vue:

Vue 有这 template 模版收集依赖的过程,轻松构建响应式,使得在一次更新中,Vue 能够迅速响应,找到需要更新的范围,然后以组件粒度更新组件,渲染视图。

React 中,一次更新 React 无法知道此次更新的波及范围,所以 React 选择从根节点开始 diff ,查找不同,更新这些不同。

解决:

把 React 的更新,交给浏览器自己控制,浏览器先执行绘制任务,空闲时间执行更新任务,解决了卡顿问题。即采用异步调度的方法。

时间分片

React让浏览器控制React更新:浏览器每执行一次事件循环都会:处理事件,执行 js,调用requestAnimation,布局 Layout,绘制 Paint,在一次执行后,浏览器进入空闲时,可以执行更新任务

谷歌浏览器提供的一个 API, 在浏览器有空余的时间,浏览器就会调用 requestIdleCallback 的回调。

阅读全文