今年6月,Airbnb 技术团队宣布,Airbnb 将放弃使用 React Native,回归到使用基于原生技术的自有框架开发 App。作为一家世界级顶尖公司,在对 React Native 投入大量精力后,突然决定弃它而去,这让不少想要使用和正在使用 React Native 的人都感到震惊和疑惑。
近日,Airbnb 工程师 Gabriel Peal 在接受外媒采访时,聊到了 Airbnb 的移动开发历史、React Native 的优缺点,以及 Airbnb 最终为什么决定从 React Native 迁移。
React Native 对 Airbnb 来说最大优势是快速开发和平台不可知论(platform agnosticism)。通过 React Native ,Airbnb 可以利用整个开发团队来帮助构建和支持他们的移动应用。这意味着无论后来的员工在移动和 Web 开发方面的背景如何,都可以快速培训上手。它还意味着更精简的代码库,因为能够跨三个平台部署一个存储库。但同时,也带来了挑战:
从 0 至 1 ,需要一大笔投入
许多人认为在 Airbnb 决定使用 React Native 时有做完整的迁移,其实到目前为止,React Native 代码仅占 Airbnb 代码库和开发资源的 15-20%,它一直就不是 Airbnb 公司的主要平台。尽管 React Native 是一个框架并且极大地简化了移动开发流程,但启动和运行起来并非易事,尤其是在已有现成代码库的情况下。将 React Native 集成到现有的移动代码库中预期会耗费大量时间和精力。
开发者仍需编写原生代码
对于 API 在两个平台之间具有明确桥梁的简单应用,React Native 是一个很好的选择。在 Airbnb 移动应用的早期阶段,React Native 是移动应用中的强大加速器。但最终,API 将无法以你想要的方式运行,你还是不得不深入到原生库中进行必要的调整。
如果聘请一位 JavaScript 开发者来维护你的 React Native 项目,那么他们必须编写原生代码来弥补功能上的缝隙。
小心“地雷”
React Native 代码中的地雷和互作用极难追踪和重现。举个实际例子,Airbnb 团队有遇到 React Native 组件在某些手机上显示一片空白的问题,该 bug 不仅不可靠,而且难以追踪。
解决方案是关闭初始化 Fresco ,这是一个适用于 Android 的 React Native 标准图像渲染库。直到今天,工程师仍然不明白为什么这个步骤修复了这个 bug 。
投入永无止境/迭代缓慢
许多团队使用 React Native 进行小型移动应用的原型设计,并相信它能解决他们的所有问题。但与所有开源软件一样,该平台在不断变化,每天都会发现新的 bug 和问题。支持 React Native 还处于动荡的生态需要持续的投资。
比如 Airbnb 工程师希望一个符合其产品目标的补丁能够尽快合并进入 React Native 框架,不幸的是,React Native 的开发生命周期为每四周发布一次。如果这次没通过,他们将不得不等待差不多一个月,来重新审查或采用他们的修改。
随着 Airbnb 的发展加速,他们无法承担其中的风险。由于劣势高于优势,促使 Airbnb 重新考量,并最终放弃 React Native 开发。
此外,虽然除了 React Native 之外还有其他的跨平台替代方案,比如 Google 的 Flutter 和微软的 Xamarin ,但和上面提到的类似的问题也都可以在这些框架上面找到,而且这两个框架在 Google 和 Microsoft 中的使用率都相对较低。虽然跨平台框架能解决大多数简单问题,但一些更复杂的问题最终还是需要回到相应移动设备的原生平台来处理。