写点什么

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:573939
用户头像

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

关注

评论

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

如何通过重定向参数实现账户劫持并获取2500美元漏洞赏金

qife122

漏洞挖掘 xss攻击

Coze 开源了!所有人都可以免费使用了

Immerse

coze Coze开源

物流KA商家业务监控能力建设与实践

京东科技开发者

一文彻底搞懂javascript中的undefined

量贩潮汐·WholesaleTide

JavaScript 前端

EyeWitness工具:渗透测试中快速发现漏洞的利器

qife122

渗透测试 EyeWitness

数据湖典型架构解析:2025 年湖仓一体化解决方案

镜舟科技

数据湖 数据分析 数据处理 StarRocks 湖仓一体

本地(或自下载)浏览器插件 安装指南

京东科技开发者

低代码的技术的生态与未来,让代码自由呼吸

秃头小帅oi

3个月,上百家企业交流,和大家聊聊AI应用的落地实践(开篇)

阿里巴巴云原生

阿里云 AI 云原生

数据湖产品全解析:2025 年主流解决方案选型指南

镜舟科技

云计算 数据仓库 数据湖 StarRocks 湖仓一体

Lakehouse x AI ,打造智能 BI 新体验

StarRocks

AI LakeHouse StarRocks 智能 BI 云原生·

Undertow 可观测性最佳实践

观测云

Undertow

神经符号一体化-打通数据驱动与规则推理的最后一公里

申公豹

人工智能、

TapData 出席 TDBC 2025 可信数据库发展大会,分享“实时+信创”时代的数据基础设施演进路径

tapdata

实时数据平台 信创数据库 无代码CDC 增量物化视图 实时数据服务

spark-sql优化简述

天翼云开发者社区

sql 大数据

Django集成Swagger全指南:两种实现方案详解

不在线第一只蜗牛

django

大数据-52 Kafka 架构全解析:高吞吐、高可用分布式消息系统的核心奥秘

武子康

Java 大数据 kafka 分布式 消息队列

一次线上生产库的全流程切换完整方案

京东科技开发者

远程访问Docker-Android模拟器

贝锐

android 内网穿透 Docker 镜像

暑期出境游用鸿蒙 5解锁新体验,海外自由行尽享“鸿蒙一夏”

最新动态

今天凌晨,字节开源 Coze,如何白嫖?

程序员晚枫

开源 工作流 智能体 coze

揭露利用Tor网络的Docker漏洞攻击链

qife122

容器安全 网络攻击

100%开源!行业首个企业级智能体

京东科技开发者

基于YOLOv8的多目标风力涡轮机、天线、烟囱、电力线检测|完整源码数据集+PyQt5界面+完整训练流程+开箱即用!

申公豹

yolov8

AI如何让企业 IT 做好审计准备?-ManageEngine卓豪

ServiceDesk_Plus

ManageEngine卓豪

云上AI推理平台全掌握 (5):大模型异步推理服务

阿里云大数据AI技术

人工智能 大数据 大模型 推理服务 异步推理

打印机安全漏洞:网络攻击的宽阔入口

qife122

网络安全 漏洞管理

揭秘 Databend 向量索引,加速 AI 应⽤的数据引擎

Databend

Flink Forward Asia 2025 城市巡回 · 上海站

Apache Flink

大数据 flink 实时计算

网络安全领导者留任后的三大发展机遇

qife122

领导力 网络安全

零信任架构实施指南:7个专家步骤详解

qife122

架构设计 零信任

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