写点什么

深入了解 React 新引擎:React Fiber

  • 2017-05-09
  • 本文字数:1080 字

    阅读完需:约 4 分钟

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

这一全新架构最初已于2016 年7 月公开发布,其中蕴含着过去多年来Facebook 不断改进的工作成果。该架构可向后兼容,彻底重写了React 的协调(Reconciliation)算法。该过程可用于确定出现变更的具体时间,并将变更传递给渲染器。

实际上该团队在单线程JavaScript 引擎的基础上构建了一种可划分优先级的协作式任务调度器。在最初的协调算法(现已更名为 Stack Reconciler )中,Virtual DOM diff 会一次性处理整个组件树:

重点在于,Stack Reconciler 始终会一次性地同步处理整个组件树。Stack Reconciler 无法暂停,因此如果更新较为深入并且可用 CPU 时间有限,这种做法并非最优化的。

与之相对的 Fiber Reconciler 则有着截然不同的目标:

  • 能够将可中断的任务拆分成块。
  • 能够对进程中的工作划分优先级、重新设定基址(Rebase)、恢复。
  • 能够在父子之间来回反复,借此为 React 的 Layout 提供支持。
  • 能够通过 render() 返回多个元素。
  • 为错误边界提供了更好的支持。

简单来说,此时不在需要等待变更传播到整个组件树,React Fiber 可以知道如何时不时暂停一下,检查是否有其他更重要的更新。这种调度能力主要基于 requestIdleCallback 的使用,而这是一种 W3C 候选推荐标准

在 React Conf 2017 大会上,Lin Clark 通过名为 React Fiber 简介的演讲循序渐进介绍了新协调器的独到之处。

大部分情况下,开发者无需担心代码的适配问题,但也有少量应用依赖以特定顺序进行的生命周期钩子(Lifecycle hook)。由于顺序已经无法保证,因此可能会遇到一些问题。

“为确保这一特性不会影响应用”,Clark 称:“Fiber 团队正在制定更为平缓的升级路径”。

Dan Abramov写到,React 团队认为大部分 React 应用不会因为第 16 版而遇到问题:

React 16(正在开发中)是一次革新,但也使用了相同的公开 API。对于 Facebook 所使用的超过 30,000 个(!)组件,其中只有少量需要改动,并且这少数组件主要被一些已经不再支持或没有正式记录在案的行为所使用。因此可以说完全可以保证 99.9% 的兼容性。这也让我们确信 React 16 基本上也可以直接适用于你的代码。

Fiber 将在 React 16 中首次登场,第 16 版不仅包含新的协调引擎,而且提供了可串联使用的全新渲染器(例如 ReactDOM、React Native)。同时 isfiberreadyyet.com 提供了测试套件的最新结果。截至撰写本文时,已顺利通过了 92.2% 的测试。

阅读英文原文 React Fiber: A Closer Look at the New Engine of React

2017-05-09 19:003729
用户头像

发布了 283 篇内容, 共 120.9 次阅读, 收获喜欢 63 次。

关注

评论

发布
暂无评论
发现更多内容

软件测试/测试开发丨ChatGPT在测试计划中的应用策略

测试人

人工智能 软件测试 测试开发 ChatGPT

即时通讯技术文集(第20期):IM架构设计技术文章(Part3) [共14篇]

JackJiang

网络编程 即时通讯 IM

2024第八届浙江智慧城市与智能建筑产品博览会

AIOTE智博会

智慧城市展 智能建筑展

初露头角!Walrus入选服贸会“数智影响力”数字化转型创新案例

SEAL安全

企业数字化转型 数智化 企业号9月PK榜 中国国际服务贸易协会

泄露个人信息的2300余名“内鬼”被抓?

极盾科技

数据安全

使用代理IP可以解决哪些网络问题?代理ip是怎么优化网络游戏玩家的游戏体验的?

巨量HTTP

代理IP

奇点云对话顺丰科技、周大生:数据中台不是一次性项目

极客天地

从AIxCC大赛看下一代AI漏洞挖掘

云起无垠

融云聊天室再放大招,服务更完整、集成更便捷

融云 RongCloud

产品 通信 服务 融云 属性

MGR新节点RECOVERING状态的分析与解决:caching_sha2_password验证插件的影响

GreatSQL

greatsql mgr

使用 NGINX Unit 实施应用隔离

NGINX开源社区

Unit 应用隔离

企业综合信息化,人力资源管理,培训考学管理,电子采购(源码系统)

金陵老街

java;

HarmonyOS Codelab 优秀样例——溪村小镇(ArkTS)

HarmonyOS开发者

HarmonyOS

性能、安全和稳定,DataAPI 为企业 API 保驾护航

袋鼠云数栈

大数据 数据中台 API

软件测试丨探索基于大模型的人工智能应用与开发,开启智能化时代

测试人

人工智能 程序员 软件测试 公开课 ChatGPT

深入学习 FastAPI 鉴权:实现可扩展的身份认证机制

Apifox

程序员 后端 鉴权 FastApi ptyhon

2024第二十三届浙江国际智能楼宇技术与智慧安防产品展览会

AIOTE智博会

智慧楼宇展 安防展 智慧安防展

分布式锁的3种实现!附代码

王磊

Java

星耀数字中国,先要存下宇宙山河

脑极体

存储

“源聚一堂”开源技术沙龙济南站顺利举办

inBuilder低代码平台

开源 低代码

阿里云PAI-灵骏大模型训练工具Pai-Megatron-Patch正式开源!

阿里云大数据AI技术

机器学习 阿里云

舞台租赁LED显示屏技术

Dylan

技术 LED显示屏 led显示屏厂家

Mac电脑最新2023 Xmind 激活中文版

胖墩儿不胖y

思维导图 Mac软件 mac思维导图 思维导图软件

如何实现MongoDB副本集实例间的数据迁移

NineData

数据库 mongodb 复制 迁移 NineData

面向OpenHarmony终端的密码安全关键技术

OpenHarmony开发者

OpenHarmony

GLTF在线编辑器

3D建模设计

gltf/glb模型 GLTF gltf编辑器

深入了解React新引擎:React Fiber_JavaScript_David Iffland_InfoQ精选文章