旧版React中,更新过程是同步的,这可能会导致性能问题。

当React决定要更新组件树时,会做很多事,比如调用各个组件的生命周期函数,计算和比对Virtual DOM,最后更新DOM树,这整个过程是同步进行的,也就是说只要一个加载或者更新过程开始,一鼓作气运行到底,中途绝不停歇。表面上看,这样的设计也是挺合理的,因为更新过程不会有任何I/O操作嘛,完全是CPU计算,所以无需异步操作,的确只要一路狂奔就行了,但是,当组件树比较庞大的时候,问题就来了。

假如更新一个组件需要1毫秒,如果有200个组件要更新,那就需要200毫秒,在这200毫秒的更新过程中,浏览器那个唯一的主线程都在专心运行更新操作,无暇去做任何其他的事情。想象一下,在这200毫秒内,用户往一个input元素中输入点什么,敲击键盘也不会获得响应,因为渲染输入按键结果也是浏览器主线程的工作,但是浏览器主线程被React占着呢,抽不出空,最后的结果就是用户敲了按键看不到反应,等React更新过程结束之后,咔咔咔那些按键一下子出现在input元素里了。

这就是所谓的界面卡顿,很不好的用户体验。

所以Fiber 架构就是用异步的方式解决旧版本同步递归导致的性能问题。

破解JavaScript中同步操作时间过长的方法其实很简单——分片。

把一个耗时长的任务分成很多小片,每一个小片的运行时间很短,虽然总时间依然很长,但是在每个小片执行完之后,都给其他任务一个执行的机会,这样唯一的线程就不会被独占,其他任务依然有运行的机会

维护每一个分片的数据结构,就是Fiber。

module.exports = {NoWork: 0, // No work is pending.SynchronousPriority: 1, // For controlled text inputs. Synchronous side-effects.AnimationPriority: 2, // Needs to complete before the next frame.HighPriority: 3, // Interaction that needs to complete pretty soon to feel responsive.LowPriority: 4, // Data fetching, or result from updating stores.OffscreenPriority: 5, // Won't be visible but do the work in case it becomes visible.
};

React Fiber 每个工作单元运行时有6种优先级

React Fiber 了解一下相关推荐

  1. React Fiber 原理介绍

    欢迎关注我的公众号睿Talk,获取我最新的文章: 一.前言 在 React Fiber 架构面世一年多后,最近 React 又发布了最新版 16.8.0,又一激动人心的特性:React Hooks 正 ...

  2. 深入了解React新引擎:React Fiber

    Facebook正在以流行的JavaScript框架React为基础开发一个全新的架构.这个名为React Fiber的全新设计改变了检测变更的方法和时机,借此可改进浏览器端和其他渲染设备的响应速度. ...

  3. 转载:React Fiber架构(浅显易懂)

    性能优化是一个系统性的工程,如果只看到局部,引入算法,当然是越快越好; 但从整体来看,在关键点引入缓存,可以秒杀N多算法,或另辟蹊径,探索事件的本质,可能用户要的并不是快-- React16启用了全新 ...

  4. 浅析 React Fiber

    引言 在 react 进入大家视野之初,Virtual DOM(VDOM)的概念让人眼前一亮,在操作真正的 DOM 之前,先通过 VDOM 前后对比得出需要更新的部分,再去操作真实的 DOM,减少了浏 ...

  5. react fiber_让我们爱上React Fiber

    react fiber by Ryan Yurkanin 瑞安·尤卡宁(Ryan Yurkanin) 让我们爱上React Fiber (Let's fall in love with React F ...

  6. [react] React Fiber它的目的是解决什么问题?

    [react] React Fiber它的目的是解决什么问题? 我个人的理解: React 15 的 StackReconciler 方案由于递归不可中断问题,如果 Diff 时间过长(JS计算时间) ...

  7. React系列——React Fiber 架构介绍资料汇总(翻译+中文资料)

    原文 react-fiber-architecture 介绍 React Fibre是React核心算法正在进行的重新实现.它是React团队两年多的研究成果. React Fiber的目标是提高其对 ...

  8. 六个问题让你更懂 React Fiber

    作者 | 零一0101 来源 | 前端印象 React Fiber 是Facebook花费两年余时间对 React 做出的一个重大改变与优化,是对 React 核心算法的一次重新实现.从Faceboo ...

  9. 前端工程师的自我修养:React Fiber 是如何实现更新过程可控的

    前言 从 React 16 开始,React 采用了 Fiber 机制替代了原先基于原生执行栈递归遍历 VDOM 的方案,提高了页面渲染性能和用户体验.乍一听 Fiber 好像挺神秘,在原生执行栈都还 ...

最新文章

  1. android存储器,Android——寄存器和存储器的区别
  2. Python3学习笔记:使用代理访问url地址
  3. 用JS制作一个信息管理平台完整版
  4. 使用NetBeans 7.4 beta提示进行更好的基于JUnit的单元测试
  5. 大二《数据结构》机考解题报告
  6. word20161206
  7. Spring Bean的生命周期例子
  8. 商业数据可视化分析基础知识
  9. c语言编写dnf辅助,DNF辅助脚本怎么制作?游戏简易脚本制作教程
  10. python 字段_python字典查询
  11. PC QQ客户端播放语音或者短视频消息无声音解决
  12. 英语语法新思维初级分享
  13. html怎么快捷复制粘贴,怎么快速复制粘贴文本?快速粘贴文本教程
  14. 利用0.618法(黄金分割法)求极小值
  15. 节拍器在学习音乐过程中起到什么作用?-小星星节拍器怎么样?
  16. python 在南京发展_南京和杭州,哪一座城市潜力大?
  17. 小程序中如何正确使用换行符‘\n‘
  18. 让世界充满AI—时代的开拓者(程序员)
  19. 【软件测试】测试点总结,收取短信验证码的测试(详全),你的即用宝典......
  20. ‘DatePicker‘ cannot be used as a JSX component.

热门文章

  1. 360数科第三季度财报:输出积木式技术样板,科技业务占比提升至28%
  2. 全新的 Discuz! Q 来了!
  3. AI ProCon 2020 圆满落幕,百位专家与万名开发者共同拉开人工智能新篇章
  4. RocketMQ 一行代码造成大量消息发送失败
  5. 程序员1w2以下的,2020年就要面对现实了...
  6. 为什么需要 Redis 哨兵?
  7. Python 2 寿命即将终结,​是时候将 3500 万行代码迁移到 Python 3 了!
  8. 山东到底有没有互联网?
  9. 你的早鸟票特权仅剩2天!百度、快手、商汤、图森等重磅嘉宾确认出席AI ProCon 2019...
  10. 比尔·盖茨承认犯下 4000 亿美元大错:误给 Google 推出 Android 机会!