作为 React Native 框架的先行者和倡导者,Airbnb 公司今日发布通告,决定放弃使用 React Native 技术,重新投入资源和精力到原生开发当中。这其中发生了什么,且听他们的工程师娓娓道来。
这是一个系列博客文章中的第四篇,概述了我们在 React Native 方面的经验以及 Airbnb 的移动应用程序。我们今天在哪里?
尽管很多团队都依赖 React Native 并计划在可预见的将来使用它,但我们最终无法实现我们原来的目标。此外,还有一些我们无法克服的技术和组织挑战,这些挑战也使得继续投资 React Native 成为一个挑战。
因此,我们开始在 Airbnb 中弃用 React Native 并将我们所有的精力重新投入原生开发。
未能实现我们的目标
快速推进
当 React Native 按预期生效时,工程师能够拥有一个非常高的开发效率。然而,我们在这个系列中列出的大量技术和组织问题还是给许多项目增加难题和意外的延迟。
质量保证
近来,随着 React Native 逐渐成熟,我们积累了更多经验,我们能够完成许多我们不确定的事情。我们构建了共享元素转换,视差,并且能够显著提高过去经常丢帧的一些屏幕的性能。然而,诸如初始化和异步首次渲染等一些技术挑战使得满足某些目标极具挑战性。内部和外部的资源匮乏使得这些挑战更加困难。
一次编码
尽管 React Native 的代码几乎完全是跨平台共享的,但我们的应用程序中只有一小部分功能使用到 React Native 技术。此外,还需要大量桥接基础设施来帮助产品工程师能够有效地工作。因此,我们在三个平台而不是两个平台上支持代码。我们发现在 Mobile 和 Web 之间存在潜在的代码共享和一些 npm 包,但除此之外,它从未以任何有意义的方式出现。
提高开发者体验
React Native 的开发人员体验不一而同。在某些方面,比如构建时间,要好得多。但是,在其他方面,比如调试,情况则非常糟糕。更多细节部分在本系列的第2部分中有所列举。
弃用计划
由于我们无法实现我们的特定目标,因此我们确定 React Native 不再适合我们。我们目前正在与团队合作制定健康的过渡计划。我们已经停止所有新的 React Native 功能,并计划在今年年底之前将大多数高流量的页面转换为原生页面。这需要一些重新设计。我们的原生基础架构团队将在 2018 年继续支持 React Native。在 2019 年,我们将开始降低支持并减少一些 React Native 开销,例如启动时的初始化运行。
在 Airbnb,我们是开源软件的坚定信徒。我们积极使用并为世界各地的许多开源项目做出贡献,并且也开放一些我们的 React Native 工作。由于我们已经放弃 React Native,我们无法向过去一样为了社区价值继续维护我们的 React Native 项目。能够对社区做的最大努力便是,我们将把我们的一些 React Native 开放源代码工作迁移到 react-native-community 组织,诸如 react-native-maps,native-navigation 以及 loottie-react-native 项目。
并不全是坏事
尽管我们无法通过 React Native 实现我们的目标,那些使用 React Native 的工程师一般都有友好的体验。在这些工程师中:
60%的人认为他们的体验是令人惊叹的。
20%认为略微友好的。
15%给予些微负面评价。
只有 5%的人持强烈否定的态度。
如果有机会,63%的工程师会再次选择 React Native,74%的工程师则会考虑将 React Native 用于新项目。需要注意的是,这些结果中存在一定的选择偏差,因为它只调查那些选择使用 React Native 的人。
这些工程师在 220 个页面中编写了 80,000 行产品代码以及 40,000 行 javascript 基础结构代码。作为参考,我们有大约 10 倍的代码量和 4 倍的每个原生平台上的页面数量。
React Native 逐渐成熟
这一系列的博客反映出我们在今天使用 React Native 的经验。但是,Facebook 和更广泛的 React Native 社区正致力于使 React Native 适用于混合应用程序。React Native 正在以前所未有的速度发展。去年有超过 2500 次 commits,Facebook 刚刚宣布他们正在解决我们面临的一些技术挑战。即使我们不再投入 React Native,我们也很高兴能够继续关注这些发展,因为 React native 的技术优势为世界各地使用我们产品的人们带来了实实在在的成功。
小贴士
我们将 React Native 整合到大型现有应用程序中,这些应用程序继续以非常快的速度移动。我们遇到的许多困难都是由于我们采用了混合模型方法。但是,我们的规模使我们能够承担并解决小公司可能没有时间解决的一些难题。使 React Native 与原生无缝协作是有可能的,但具有挑战性。每个使用 React Native 的公司都会有自己独特的方法,这是来自他们的团队组合,现有应用程序,产品需求和 React Native 的成熟度。
当所有事情聚集到一起时,它为许多功能所做的工作,迭代速度,质量和开发人员的体验匹配或超越我们的所有目标和期望。有时候,我们真的觉得我们正在改变移动开发的游戏规则。尽管这些体验非常令人鼓舞,但当我们将这些积极方面与工程组织的痛点以及当前的需求和资源相平衡时,我们认为它已不适合我们了。
决定是否使用新平台是一个重大决定,完全取决于你们的团队独有的因素。我们的经验和弃用原因可能不适用于你们的团队。事实上,许多 公司今天仍在继续成功使用它,它可能仍然是他们的最佳选择。
虽然我们从未停止过投入精力给原生,但弃用 React Native 能够释放出更多资源,使原生部分做得比过去更好。你可以继续阅读本系列的下一部分,以了解我们的原生新功能。
这是该系列博文中的第四部分,重点介绍我们在 React Native 方面的经验以及 Airbnb 移动应用的下一步计划。
第1部分:Airbnb 的 React Native 实践
第2部分:技术方面
第3部分:构建跨平台移动团队
第4部分:关于 React Native 的重大决定
第5部分:移动开发的下一步
领取专属 10元无门槛券
私享最新 技术干货