iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >React新特性为什么产出这么慢
  • 444
分享到

React新特性为什么产出这么慢

2024-04-02 19:04:59 444人浏览 薄情痞子
摘要

本篇内容主要讲解“React新特性为什么产出这么慢”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“React新特性为什么产出这么慢”吧!有人曾说:每过一年,前端的

本篇内容主要讲解“React新特性为什么产出这么慢”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“React新特性为什么产出这么慢”吧!

有人曾说:每过一年,前端的入行难度提升一倍。

难度提升很大程度源于前端技术飞快的更新导致新技术加速出现,老技术加速淘汰。

但是,这里有个奇葩:React。

作为前端领域最广为人知的技术之一,React2015年被「Jordan Walke」创造出来。

发展到今天,6年时间,不仅框架本身没有没落,框架所使用的jsX语法甚至已经成了前端领域事实上的通用DSL。

在这激荡的6年中,虽然前端领域天翻地覆,但是React的主要api和方法改动却很少。

这一方面展示了React核心团队卓越的前瞻性和框架设计能力。

另一方面,不禁让人质疑,React新特性为啥产出这么慢?江郎才尽啦?

尤其是前段时间,React17经过了2年的迭代终于发出稳定版,但是却没有新增特性。

这个问题的标准答案恐怕只有React团队成员才知道。

不过,我们可以从源码feature的迭代过程来管中窥豹。

新特性如何产出

如果把React比喻为一艘战舰,他对外提供了「开炮」、「航行」等能力。

开发者就像战舰的船员,使用这些能力操纵战舰的行为。

当React这艘战舰需要开发新的能力,比如「高速航行」

「航行」依赖于战舰的整套动力系统。

那么,一定会有大量动力系统的改造工作需要先行完成。

前期改造工作需要做多长时间呢?

纵观React历史,将组件树的render从同步(Legacy Mode)变为可中断的异步(Concurrent Mode),花了2年。

这其中包括:

  • 将底层架构递归(Stack Reconciler)变为遍历(Fiber Reconciler)

  • 实现调度器(Scheduler)

  • 实现调度算法(ExpirationTime,现在改为Lanes)

Fiber是如此出名,很多前端多听说过。

今天,我们挑一个不出名的底层feature —— effect list。

让我们看看他的迭代过程。

为什么选择effect list

effect list是React源码commit阶段的一个特性,选择他的迭代历程讲解是因为:

  1. 鸿蒙官方战略合作共建——HarmonyOS技术社区

  2. 他是源码内部的feature,对开发者不可知

  3. 表面上看起来这是一个不大的改动

  4. 他的改动是为了上层新特性而做的底层调整

什么是effect list

React内部工作大体可以分为3个阶段:

  1. 鸿蒙官方战略合作共建——HarmonyOS技术社区

  2. 调度更新

  3. 决定什么组件需要更新

  4. 更新组件

那么第三步如何知道要更新哪些组件呢?靠effect list。

如果将React Fiber树比喻为圣诞树,那么每个Fiber节点就是圣诞树上的挂件。

其中需要更新的节点就是亮的彩灯。

如何找到亮的彩灯(需要更新的节点)呢?

从圣诞树顶向下一个挂件一个挂件找么(从根节点依次向下遍历)?

可行,但是效率太低。

为此,React的做法是:将需要更新的节点连接形成一条单链表

查找时,只需要遍历这条单链表就行。就像圣诞树上的彩灯带一样。

React新特性为什么产出这么慢

这条彩灯带(单链表)就是effect list。

计划赶不上变化

effect list在React源码中辛勤工作了2年。

但是,未来React新特性需要底层架构支持遍历整棵Fiber树。

看我刚才的介绍,是不是去掉effect list,改为从根节点遍历就行?

感觉这需求,我上我也行(并不是)。

React新特性为什么产出这么慢

于是,经过一番内部讨论后,2020年7月7日,「bvaughn」老哥提了effect list改造相关的第一个PREffects list  refactor #19261

  • 移除了effect list相关变量(firstEffect,lastEffect, nextEffect)

  • 新增了subtreeTag标记变量用于优化遍历Fiber树的性能

感觉胜利在望,7月16日,老哥又继续提了PR Effects list refactor continued: passive effects  traversal #19374

React新特性为什么产出这么慢

增加了对useEffect回调函数执行流程的改动(没错,useEffect回调函数的执行也属于effect list的一个节点)

感觉胜利在望,OKR要到手了呢~

经过漫长的测试、回归,到了11月,Andrew发现effect  list的重构造成某个指标下降,但由于React源码运行流程太过复杂,一时半会也查不出原因。

只能先回滚了,见PR Reset new fork to old fork #20254

今年1月中旬,终于验证这个特性没有问题,又重新改回去,见PR Re-land refactored implementation of layout  phase in new fork #20595

更难受的是,React源码中为了区分新旧特性,每个文件都分为.new和.old两个版本,每次劳动量都是双份。

React新特性为什么产出这么慢

总结

兜兜转转,核心团队2个成员从7月忙到第二年1月,每次PR,还需要其他成员review代码。

终于将这个特性合并到master。

想想Andrew走在街上被React爱好者认出来,亲切询问:嗨,Andrew,下半年你忙啥了?

Andrew:

React新特性为什么产出这么慢

从这个小feature的迭代历程,你感受到React新特性迭代慢的原因了么?

到此,相信大家对“React新特性为什么产出这么慢”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

--结束END--

本文标题: React新特性为什么产出这么慢

本文链接: https://www.lsjlt.com/news/68467.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • React新特性为什么产出这么慢
    本篇内容主要讲解“React新特性为什么产出这么慢”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“React新特性为什么产出这么慢”吧!有人曾说:每过一年,前端的...
    99+
    2024-04-02
  • Python为什么这么慢
    本篇内容介绍了“Python为什么这么慢”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Python 现在越来越火,已经迅速扩张到包括 Dev...
    99+
    2023-06-17
  • 在html5中出现了什么新特性
    小编给大家分享一下在html5中出现了什么新特性,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!在html5中出现了一些新特性: canvas 元素 视频 video 和 声频audio 元...
    99+
    2024-04-02
  • 浅谈Usingfilesort和Usingtemporary为什么这么慢
    目录1.简介2.Using filesort2.1 Using filesort 现象模拟2.2 Using filesort 之Mysql的执行过程2.2.1 全字段排序2.2.2...
    99+
    2024-04-02
  • Java 21性能提升,会推出什么新特性?
    本文探讨Java 21值得期待的关键更新点。 微信搜索关注《Java学研大本营》 Java 20为我们带来了革命性的改进,现在我们一起揭开Java 21的面纱,探索一下它有哪些主要更新,并带来了哪些新特性: 1 更快的启动时间 ...
    99+
    2023-09-29
    java python 开发语言
  • react 16.8版本新特性及对react开发的影响是什么
    本篇内容主要讲解“react 16.8版本新特性及对react开发的影响是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“react 16.8版本新特性及对react开发的...
    99+
    2023-06-29
  • MySQL8.0新特性是什么
    本篇内容主要讲解“MySQL8.0新特性是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“MySQL8.0新特性是什么”吧!1. 默认字符集由latin1变为...
    99+
    2024-04-02
  • CSS3有什么新特性
    这篇文章给大家分享的是有关CSS3有什么新特性的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。   一、RGBA和透明度   RGBA是RGB色彩模型的一个扩展。在本质上看也是...
    99+
    2024-04-02
  • Vue.js2.5有什么新特性
    本篇内容介绍了“Vue.js2.5有什么新特性”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!TypeScr...
    99+
    2024-04-02
  • php7.4新特性是什么
    这篇文章主要介绍了php7.4新特性是什么,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。php有什么用php是一个嵌套的缩写名称,是英文超级文本预处理语言,它的语法混合了C、...
    99+
    2023-06-14
  • Java12有什么新特性
    这篇文章主要讲解了“Java12有什么新特性”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java12有什么新特性”吧!Switch 表达式 (JEP 325)在 Java 12 中,对 S...
    99+
    2023-06-15
  • es6新特性是什么
    小编给大家分享一下es6新特性是什么,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!es6新特性:1、ES6 引入了class,让JavaScript的面向对象编程...
    99+
    2023-06-06
  • MySQL8.0有什么新特性
    本篇内容介绍了“MySQL8.0有什么新特性”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、MySQL ...
    99+
    2024-04-02
  • Dojo1.6有什么新特性
    这篇文章主要讲解了“Dojo1.6有什么新特性”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Dojo1.6有什么新特性”吧!Dojo作为最老牌的JavaSc...
    99+
    2024-04-02
  • Java13新特性是什么
    这篇文章主要介绍了Java13新特性是什么,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。 Java13新特性 Java 13 的官方开发...
    99+
    2024-04-02
  • MySQL5.7新增了什么新特性
    这篇文章主要介绍“MySQL5.7新增了什么新特性”,在日常操作中,相信很多人在MySQL5.7新增了什么新特性问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”MySQL5.7...
    99+
    2024-04-02
  • Python 3.9 新特性:为什么让 Shell 更强大?
    Python 3.9 是 Python 语言的最新版本,它在 Shell 方面进行了一些重大的改进。这些改进让 Python Shell 更加强大和易用,同时也增强了 Python 在命令行和脚本方面的能力。 在本文中,我们将介绍 Pyt...
    99+
    2023-06-14
    shell spring django
  • Java11的新特性是什么
    这篇文章主要讲解了“Java11的新特性是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java11的新特性是什么”吧!1. String API字符串绝对是 Java 中最常用的一个类...
    99+
    2023-06-02
  • C++11有什么新特性
    这篇文章主要介绍“C++11有什么新特性”,在日常操作中,相信很多人在C++11有什么新特性问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C++11有什么新特性”的疑惑有所帮助!接下来,请跟着小编一起来学习吧...
    99+
    2023-06-16
  • Oracle 20c新特性是什么
    本篇内容主要讲解“Oracle 20c新特性是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Oracle 20c新特性是什么”吧!在 Oracle Data...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作