写点什么

FB 正在大规模重构 React Native,预计今年发布

  • 2018-06-19
  • 本文字数:1589 字

    阅读完需:约 5 分钟

几日前,Facebook 刚刚发布了 React Native 0.56,随后,React 工程经理 Sophie Alpert 在其官方博客上宣布他们将要重构 React Native,使其更轻量,更适应 JavaScript 生态圈的发展。

React Native 的应用现状

Sophie Alpert 说,在 Facebook 内部,他们比以往任何时候都重视 React Native,它已经被用于 Facebook 许多重要的项目上。包括他们最受欢迎的产品之一 Marketplace,每月有 8 亿人使用。

React Native 也开始被应用在应用程序的其他地方,如果读者上个月观看了 F8 主题演讲,就会发现 Blood Donations、Crisis Response、Privacy Shortcuts 和 Wellness Checks 的所有新功能都是使用 React Native 构建的。

Facebook 主应用以外的项目也在使用 React Native。新的 Oculus Go VR 头戴式设备对应的移动应用程序就完全使用 React Native 构建。

Sophie Alpert 表示,React Native 的目标从来都不是替代其他技术,他们专注于 React Native 自身,努力使之变得更好,但他们希望看到其他团队从 React Native 中得到一些想法或灵感,例如将即时重新加载技术运用到非 JavaScript 代码中。

架构

React Native 项目的设计初衷是成为 JavaScript 和原生应用之间的桥梁。React DOM 将 React 的状态更新变成了命令式、可变的 DOM API 调用,如 document.createElement(attrs) 和.appendChild(),而 React Native 则返回一个单独的 JSON 消息,它列出了要执行的一些操作,如 [[“createView”, attrs], [“manageChildren”, …]]。

他们将整个系统设计为永不依赖获取同步响应,并确保列表中所有的内容都可以完全序列化为 JSON,并可以反序列化回来。

这样做是为了提高灵活性:在这个架构之上,可以构建像 Chrome 调试器之类的工具,这些工具可以通过 WebSocket 连接异步运行所有的 JavaScript 代码。

在过去的 5 年里,他们发现最初的设计原则加大了某些特性的开发难度。异步桥接(asynchronous bridge)意味着不能直接将 JavaScript 逻辑与很多原生 API 集成在一起,因为这些原生 API 是同步的。

批量桥接(本地调用队列)意味着 React Native 应用程序调用本地函数会更加困难。而且串行化的桥接意味着不必要的复制,因为它不是直接在两个世界之间共享内存。对于完全使用 React Native 构建的应用程序,这些限制通常是可承受的。但对于在 React Native 与现有应用程序代码之间进行复杂集成的应用程序,就很糟糕了。

因此,Facebook 正在对 React Native 进行大规模重构,让框架变得更加灵活,并更好地与 JavaScript / 原生混合应用中的原生基础设施集成。

通过这个项目,他们将应用在过去 5 年中学到的知识,逐步让架构走向现代化。他们正在重构 React Native 内部,大部分工作都是在底层进行的,现有的 React Native 应用程序几乎不需要做出更改。

为了使 React Native 更轻量化并能更好地适应现有的原生应用,此次重构主要从三个方面进行。

首先,改变线程模型。UI 更新不再需要在三个不同的线程上执行,可以在任意线程上同步调用 JavaScript 进行优先更新,同时将低优先级工作推出主线程,以便保持对 UI 的响应。

其次,将异步渲染功能引入 React Native 中,允许执行多个渲染并简化异步数据处理。

最后,简化桥接,让它更快、更轻量。原生和 JavaScript 之间的直接调用效率更高,并且可以更轻松地构建调试工具,如跨语言堆栈跟踪。

完成以上工作之后,就有可能带来更紧密的集成。现在,如果不通过复杂 hack 的手段就无法让原生导航和手势处理或原生组件(如 UICollectionView 和 RecyclerView)一起工作。在对线程模型做出更改之后,就可以直接构建这样的功能。

Sophie Alpert 最后说,他们的目标是希望 React Native 在 JavaScript 端能够更加轻量,以更好地适应 JavaScript 生态系统。等这个项目将要完工时,Facebook 会披露更多的细节,敬请期待。

查看英文原文: http://facebook.github.io/react-native/blog/

感谢无明对本文的审校。

2018-06-19 12:573893
用户头像

发布了 83 篇内容, 共 52.2 次阅读, 收获喜欢 187 次。

关注

评论

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

五天玩转EMAS Serverless训练营

移动研发平台EMAS

阿里云 #Serverless #EMAS

LabVIEW图像分割算法(基础篇—6)

不脱发的程序猿

机器视觉 图像处理 LabVIEW 图像分割算法

Hoo虎符研究院 | 币海寻珠最新一期的DAO生态

区块链前沿News

DAO Hoo 虎符交易所 虎符研究院

2022 让我们登上更大的舞台

坚果

28天写作 12月日更 2021年终总结 盘点 2021

腾讯云数据库2021年成绩单,请检阅!

腾讯云数据库

tdsql 国产数据库

seata分布式事务TCC模式介绍及推荐实践

恒生LIGHT云社区

分布式 分布式事务 seata TCC

CentOS 停服,龙蜥社区已上线解决方案专区

OpenAnolis小助手

centos 国产操作系统 龙蜥社区

如何打造一个云原生背景下的可观测平台?

淡泊明志、宁静致远

『征文精选』ShardingSphere-Proxy:Base 事务基于 Seata 验证

SphereEx

数据库 架构 开源社区 ShardingSphere SphereEx

向未来飞驰:武汉推开了AI产业化和产业AI化的三重门

脑极体

皮皮APP x 武汉市社会心理服务指导中心 联合开展社交讲座

联营汇聚

.NET6新东西--Logging Source Generator

喵叔

28天写作 12月日更

大型购物平台的系统设计与架构

恒生LIGHT云社区

平台搭建 构架 平台架构

最好的 6 个免费天气 API 接口对比测评

蒋川

API 天气api

建木持续集成平台v2.1.1发布

Jianmu

DevOps CI/CD 开源软件

61 K8S之日志系统部署

穿过生命散发芬芳

k8s 28天写作 12月日更

Java 数据持久化系列之 HikariCP (一)

程序员历小冰

持久化 HikariCP 28天写作 12月日更

一个cpp协程库的前世今生(五)协程执行环境env

SkyFire

c++ cocpp

元宇宙很好,但VR开发者不准备停留在这里

脑极体

数字化转型失败,有哪些原因?

禅道项目管理

数字化转型

一个cpp协程库的前世今生(四)协程上下文ctx

SkyFire

c++ cocpp

回顾 2021,拥抱 2022~

阿策小和尚

盘点2021

当MySQL执行XA事务时遭遇崩溃,且看华为云如何保障数据一致性

华为云开发者联盟

MySQL 华为云

Postman 使用教程 - 手把手教你 API 接口测试

蒋川

Postman 接口测试

祝大家元旦快乐,分享一些知识演讲

石云升

28天写作 12月日更

硬核化解ISV四大痛点,华为云智联生活行业加速器助力伙伴实现商业成功

华为云开发者联盟

华为云 HarmonyOS 智联生活 华为云IoTDA 云云协同

性能提升40%!阿里云神龙大数据加速引擎获TPCx-BB世界排名第一

阿里云弹性计算

阿里云 神龙

一个cpp协程库的前世今生(三)cocpp的核心框架结构

SkyFire

c++ cocpp

盘点 2021|一个 SAP 成都研究院开发工程师的2021年度总结:既没有厚积,也未能薄发

汪子熙

程序员 28天写作 12月日更 盘点2021 盘点 2021

关于内核堆溢出漏洞的分析

网络安全学海

黑客 网络安全 信息安全 安全漏洞 渗透测试·

如何将List<Integer>转换为int[]数组

liuzhen007

Java 28天写作 12月日更

FB正在大规模重构React Native,预计今年发布_架构_Sophie Alpert_InfoQ精选文章