React Native 这一年

澳门新萄京官方网站 1

译者:Ricky

React Native
开发团队在博客宣布,后续版本将从目前两周一更的节奏改为每月一更。

原文: React Native: A year in
review

开发团队表示,React Native
推出后不久时,为了帮助采用社区反馈的新功能,选择每两周发布一次版本,保持版本稳定生产使用。
因为在 Facebook 上,必须每两周稳定一次代码库,以发布 iOS
应用,所以团队以相同的速度发布开源版本。 而现在,由于每周都要从 master
同步反馈,导致许多 Facebook 应用,特别是 Android
端的,往往出现每周发布一次版本的情况。我们经常听到社区反馈,很难跟上这个发布节奏。像
Exponent 这样的工具必须跳过中间版本才能跟上版本的快速变化。

时光荏苒,我们开源 React
Native
已经一年了。这个由一小戳工程师发起的一个创意,现在已经作为一个框架被
Facebook 的产品团队广泛使用了。今天,在 F8 大会上我们宣布微软正在把
React Native 引入 Window
生态系统,使开发者能够在
Windows PC, Phone 和 Xbox 平台上使用 React
Native。同时也提供了开源工具和服务,如 Visual Studio Code 的 React
Native 扩展和帮助开发者在 Window 平台上创建 React Native 应用的
CodePush。此外,三星正在使用
React Native 构建它的 Hybrid 平台,这使开发者能够为数以百万计的 SmartTV
和可穿戴设备创建应用。我们也发布了 澳门新萄京官方网站,Facebook SDK for React
Native,这使开发者能够更便捷地在他们的应用中集成
Facebook 的社交属性,比如登录、分享、App 分析和绘图
API。仅在一年之中,React Native
已经改变了开发者们在各大主流平台构建应用的方式。

因此,开发团队决定,后续将节奏调整为月更,虽然可能会因为要避免周末或处理不可预见的问题,导致发布日期无法固定,但可以期望的是版本会在当月的第一天保证可用,并在最后一天前完成更新。

这是一个史诗般的旅程——但是,我们才刚刚开始。让我们回顾一下 React Native
自开源一年以来的成长和演化,我们遇到的挑战,以及我们对未来的期望。

(文/开源中国)    

开端:React Native 起源

秉承 Facebook 的黑客文化,React Native 诞生于 2013
年夏天的一个黑客马拉松项目。与
React
相似,React Native
像是一个大胆的非传统的想法。至于它是否能够实际工作,我们并不确定。JS 与
原生 ScrollView
怎样通过触摸来协同工作?性能又如何呢?怎样调试?这些挑战从未停止工程师们专注并前进的脚步。

在我们有了一个可工作的原型之后,我们预期这个项目会赋予 Facebook
很大的潜能。几年前我们把工作重心转向原生移动开发。但是,重新编译代码往往很慢,而且构建
iOS 和 Android 需要不同的技巧。所有这一切意味着低效的产品开发。而 React
Native 的思想意味着,我们可以把 Web
开发中喜欢的所有东西引入到移动开发——比如快速迭代,并且只需要一支团队去开发整个产品。这意味着我们能够前进得更快。

结果,我们决定开始对这个项目投入时间和精力——我们知道,证明这项新技术能够真正工作的唯一方法就是把它丢到一个有难度的项目中去。我们选择了信息流原型,这是早期使用
React Native 构建的项目之一,当时我们还在同时开发 React Native
的基础设施。它的代码后来实际变成了独立 Facebook Groups 应用的基础。

直到 2014 年 7 月,仍然只有少数人在跟进这个项目,这时 React Native
有幸得到了一个大项目:Ads Manager 项目组想开发独立的
iOS应用。但是,他们没有开发 iOS 的经验。这太合适了。接下来是 Ads Manager
产品团队与 React Native
团队几个月的紧密合作。产品工程师们不断打破平台的分界线。目标是第一个完全由
React Native 开发的应用在用户体验上不逊于用 Objective-C 开发的应用。

我们对这项任务的可能行充满自信,随即决定把 React Native
做成跨平台,并在伦敦组建了 Android 团队。其中的三人在 2014
的后半年里编写了大部分核心 Android
运行环境和最初的组件库。我们的目标是在 Android 上运行 Ads Manager 的 iOS
代码,到 2014
年底我们已经跑通了一个基础的版本。虽然它缺少很多视图并且在低端设备上性能表现欠佳,但是你可以看到广告列表了,甚至可以创建一个广告。我们有信心能解决这些问题,于是进一步推进了性能与功能的平衡。

澳门新萄京官方网站 2

2015年1月,Facebook Ads Manager 的 iOS 基础代码运行在 Android 上。

Facebook Ads Manager 的 iOS
版本于2015年2月发布,研发时间不到6个月。同时,大家都在关注在开源 iOS
项目上实现 JS 或 iOS。在2015年1月的 React.js
大会上,我们发布了公开预览版,随后在3月的
F8
开发者大会上,我们把它开源了。

随即,Ads Manager 的产品工程师与伦敦的 Android
团队紧密配合,开始把他们的 JavaScript 代码向 Android 移植。在开发 Ads
Manager 的 iOS 版时,我们的目标不是平台间的代码共享,而是期望这能对使用
React Native 有积极影响。然而当 Andriod 版 Ads Manager
准备发布时,我发现两个应用之间复用了 85% 的代码。

2015年6月,在经过3个月的开发和1个月的内测后,第一个 Android 版本的 Ads
Manager
发布了。有了
React Native 的 iOS 版的成功,我们马上着手准备 React Native 的 Android
版,我们预期会引起大家的强烈兴趣。毕竟,不得不为不同平台单独开发应用是业界的一个问题。从
Ads Manager 的开发经验中,我们知道 React Native 能够解决这个问题。

与 iOS 发布类似,我们想尽快得到 Android
版的反馈。为此,我们只开发了核心运行环境和少数视图与模块(Text, Image,
ScrollView, Network, AsyncStorage等等)。9月14日,我们在 GitHub 和 npm
上发布了核心的 Android 运行环境和初始 Android 模块集。React Native 0.11
也成为了第一个支持 Android 的版本。自开源起,我们已经添加了与 iOS
对应的如下 Android 模块:Alert, AppState, CameraRoll, Clipboard, Date 与
time pickers, Geolocation, Intent, Modal, NetInfo, Pull to refresh view,
Picker, Slider, View Pager, WebView。

不必多言,被 Facebook 以外的团队采用让 React Native
团队的所有人都异常激动。

澳门新萄京官方网站 3

React Native 从开始到 Android 版发布的里程碑。

快速接纳:一年的学习与成长

React Native 被接纳的程度以及开发者社区成长的速度比我们想象的快得多。

超过 650 人向 React Native 代码库提交了代码。在5800余次的提交中,30%
的贡献者不在 Facebook 工作。2016年2月,外部贡献者的提交首次超过了
50%。大量社区人民对 React Native
贡献代码,我们看到的是平均每月266次的PR(pull
request)(每天多达10个)。其中很多是高质量的,并且实现了广泛使用的功能。

澳门新萄京官方网站 4

React Native 在 GitHub 上每月开放状态 PR 的数量。

起初,PR 的数量使快速和高效的审查变得很困难。寻找每个 PR
的审查者意味着每天大量的人肉工作。为了解决这个问题,我们使用了两个
GitHub 机器人来尽量使每件事自动化。

第一个是提及机器人(mention bot),它负责为每个 PR 寻找正确的审查者。

澳门新萄京官方网站 5

提及机器人根据责任信息找到每个 PR 的最佳审查者。

提及机器人现在已经开源,帮助我们精简每天要审查多少个
PR。一个有趣的事实是上个月超过 50%
由社区贡献的提交,机器人总能在社区中找到最好的审查者。

我们遇到的第二个问题是合并 PR 并不简单。Facebook 工程师使用的 React
Native 代码与你在 GitHub 上看到的一模一样,我们并没有 fork
代码库。因此,我们会在把你的 PR 合并到我们称之为
fbsource
的庞大 Mercurial 仓库之前,自动测试像 Facebook Ads Manager 这样的应用。

澳门新萄京官方网站 6

我们称之为 fbsource 的庞大 Mercurial
仓库的简单结构。这个仓库包含了我们的移动和后台代码。

合并 PR 的过程通常包含几个人工步骤。我们通过发表一条 GitHub
上的评论简化了这一切。

澳门新萄京官方网站 7

@facebook-github-bot shipit:如果所有内部测试通过,代码会同时合并到
fbsource 主干和 GitHub 主干。

多亏这些工具,这个项目能够适应大量的 PR。一年里,总共关闭了 2351 个 PR。

澳门新萄京官方网站 8

每月关闭 PR 的数量。

网站地图xml地图