8a1e2c59e8aa98985c4d02c27523d837
[译] Airbnb 下线 ReactNative

Medium 原文 Sunsetting React Native

由于很多技术上以及组织架构上的问题,我们(Airbnb)决定全面下线 ReactNative ,会把所有的研发精力都投入到让 Native 原生开发上,希望原生效果更加完美,令人惊艳。

这是我们一系列文章中的第四篇,整个系列文章打算重点介绍我们在 React Native 方面的经验以及Airbnb 的移动端 App 下一步该怎么走

尽管很多公司和团队在项目中都使用了 ReactNative 并且在未来可预见的功能与需求中还会继续使用它,但我们最终还是无法实现我们最初定下的目标。此外,还有一些来自于技术上与团队组织上无法克服的困难,使得继续投资 ReactNative 已经变成了一个挑战。

因此,我们决定向前看,我们正在下线 Airbnb 中的 ReactNative,并且把所有的这些努力都重新投资在原生开发上。

ReactNative 没有实现的目标

快速迭代

当 ReactNative 按着预期进行工作的时候,我们的研发工程师确实能够以无与伦比的速度进行功能迭代。然而我们还是发现有很多技术上或者组织上的问题,会给项目增加很大的挫败感以及带来意外的项目延期。

保证质量底线

最近,随着 ReactNative 的逐渐成熟,我们也积累了更多的经验,以前很多做不到的事情现在都能实现。我们实现了共享元素转场,视差效果,并且能把过去丢帧的模块的性能显著提高。然而,在一些诸如初始化和异步首屏渲染等技术问题上,想达到某些预期目标很难。并且内部以及外部资源的匮乏也让事情变得更加艰难。

一次开发适配两/三个平台

尽管使用 ReactNative 代码开发出来的功能,几乎就是跨平台共享的,但我们的 App 中,只有一小部分是 ReactNative 的。除此之外,还需要进行大量的桥接基础设施建设,才能让 ReactNative 的工程师能够顺利有效的进行工作。因此我们尝试在三个平台上共享代码,而不是只关注移动端2个平台。理论上我们确实看到了在 Web 上与 App 上共用几个 npm 包有很大的潜力,但我们并没有实质上的的进展。

提高开发体验

使用 ReactNative 的开发人员的开发体验非常的混乱,不好衡量。有些方面,比如构建时间,这种动态化的热重载的开发模式要好很多。然而其他方面,比如调试就变得非常的低效。详细的细节在第二篇文章就提过了。

下线计划

因为我们无法实现当初定下的目标,我们认为 ReactNative 已经不适合我们了。我们正在准备一套稳妥健康的迁移方案。我们已经停止了所有 ReactNative 的新功能开发,并且计划在今年年底完成最主要的高流量的功能模块,从 ReactNative 迁移回原生开发。这件事情也得益于有些功能模块正打算重新设计。我们的基础架构团队在2018年继续对 ReactNative 提供支持,但到了2019年将要降低支持,并着手减少一些 ReactNative 资源分配,比如 RN runtime 启动初始化资源等。

在 Airbnb 我们是开源软件的坚定支持者,我们很积极的为很多全世界的开源项目做了大量贡献,并且也开源了我们在 ReactNative 上的一些工作。但由于我们已经决定下线 ReactNative ,我们也没有经历继续维护这些 ReactNative Repos 开源项目。为了能够更好的回报社区,我们决定把我们的一些 ReactNative Repos 开源项目,迁移到 react-native-community 社区。我们已经开始迁移 react-native-maps 这个项目,并且未来也会逐渐迁移 native-navigation 和 lottie-react-native 这两个项目。

top Created with Sketch.