兜兜转转,不少开发者还是发现 React Native 的真相定律。
日前,国外知名聊天软件 Discord 于官方博客上发布了一则《Android 版本 Discord 激动人心的更新》公告。在公告中,Discord 指出,其将在未来几周内改进 Android 版本的应用程序,具体包括通过跨 Android、iOS 和桌面端的集中式简化应用开发流程,实现跨平台的功能一致性。
图源:Discord 官网
iOS、桌面端、Android 步调不一,苦不堪言的跨平台开发
一直以来,我们在使用软件时经常会发现不同平台上,相同的应用程序更新步伐都不太一致,往往都是 iOS 端和桌面端先行发布之后,Android 平台上的应用程序才姗姗来迟。这种现象也同样出现在了 Discord 上。
如今,Discord 决定改变这种现状,其表示正在使用 React Native 来进行 Android 应用开发,这意味着在 Discord 的每个平台上都能以更快速度改进体验,同时仍然在 UI 中保留 Android 和 iOS 特定的模式。
Discord Android 版使用 React Native 开发
作为一款跨平台框架,React Native 是由 Facebook (现更名为 Meta)软件工程师 Jordan Walke 在 2013 年发起了的一个黑客马拉松项目,彼时他发现了一种为 iOS 应用程序生成 UI 组件的方法。因此,React 开源框架最初是为 iOS 构建的,并于 2015 年 3 月作为开源项目在 GitHub(https://github.com/facebook/react-native)上可供公众使用。随后,Facebook 也迅速为 React Native 提供了 Android 支持。
截至目前,React Native 已经成为 GitHub 中最大的项目之一,拥有 104k Star 和 22.3k 分支。它也被广泛用于许多流行的移动应用程序,包括Instagram、Microsoft Outlook、Shopify、Tesla、Pinterest 等等。
Discord 自 2015 年以来一直在其 iOS 应用程序中使用 React Native。如今在将 Android 应用程序开发迁移到 React Native 框架下, Discord 表示,“Android 用户还将享受更快的应用程序更新发布周期的好处。React Native 允许我们简化和整合流程,有助于工程师更高效地工作,更频繁地推送更新,特别是现在团队不会花太多时间为不同的设备维护不同的代码库。”
React Native 是跨平台神器?
针对 Discord 的迁移,不少网友也发起了对 React Native 的使用的讨论。
@ramesh31:
React Native 确实是移动开发的游戏规则改变者。去年,我用它来构建一个新的 iOS 应用程序,这是自旧的 Objective-C / UI-Kit 时代以来的第一次。实际上,我在几分钟内构建了一些东西,这在当时需要花费数小时或数天的时间编写自定义 OpenGL 和网络代码。在这一点上,任何性能权衡都是值得的。
不过,由于性能、迭代速度、复杂度等维度的重重挑战,曾经也有不少公司如 Airbnb、Udacity 在使用一段时间的 React Native 之后选择了放弃,重新拥抱原生开发。对此,也有网友@Grim-444 根据自己公司的实践分享道:
“我非常确信 React Native 只带来一件真正的改变,那就是它为 PM/经理提供了一些很好的宣传材料,告诉他们如何领导团队“切换到共享的跨平台代码库”。然后,他们在使用 React Native 做迁移工作时,进而需要一直处理迁移到 RN 的长期后果。
以我们公司为例,近日,技术团队将 Android、iOS 应用程序从原生开发转为 React Native 开发。RN 发起人承诺在平台之间共享代码以及性能会和原生开发一样好,以及 UI 也会像原生开发一样获得各种各样的好处,然而最终这些都没有真正的实现。
到了最后,RN 的代码只占了 Android 应用程序的 20%。技术团队不能实现“编写一次”,在两端运行。
原来,我们有两个团队:iOS 和 Android 开发团队。现在,我们有三个团队,iOS 原生、Android 原生和 React Native 团队。进而 React Native 团队内部还被分为 iOS 和 Android 两大阵营,显得特别乱。
另外使用 RN 开发还存在一些问题,如:
- 对于在 RN 中没有办法完成的事情,我们还得需要一个配备齐全的 Android 团队的支持。
- 在使用 React Native 开发时,与原生开发的应用程序性能差异非常明显。
- 现在我们组织也有问题,因为应用程序涉及多个团队/语言,应用程序的不同部分由不同的团队和管理层拥有,而不是只有一个团队来开发一款好的应用程序。
- 我们团队的不少工程师都不想与 RN 有任何关系。
- 我们的代码库现在依赖于第三方平台和完全不同于 Google 所说的应该构建 Android 应用程序的语言。为什么我们不按照 Android 团队所说的方式构建 Android 应用程序呢?是否真的有必要长期支持 RN/JS?”
为此,你怎么看?是否使用过 React Native?