Mackit 新品

Mackit — macOS 开发者缓存清理工具:扫描 Xcode / Node / Flutter 等可再生缓存,逐项标示风险,把磁盘空间拿回来

了解详情
温馨提示 2024年 6月我们已经停止开发者板块文章内容更新,谢谢来访。 存档数据
前端

Flutter 与 React Native 2024

React Native 是 Facebook 创建的开源移动应用程序框架。它于 2015 年 3 月发布,现已成为最流行的移动应用程序开发框架之一。

Flutter 是 谷歌 创建的开源 UI 软件开发工具包。它于 2017 年 5 月首次推出,并迅速在开发者社区中流行起来。

Flutter 和 React Native 支持的平台

这两个框架都允许您部署到 iOS、安卓、Web、MacOS 和 Windows,但应注意一些特定于平台的注意事项:

img-1712453480069-1841

Flutter 和 React Native 支持的平台

Flutter 开箱即用地支持所有平台,但部署到 Web 时存在一个关键限制——Flutter 不构建为 HTML。

同时,React Native 支持所有平台,但您需要使用 Microsoft 的(第三方)软件包来构建 Windows 和 macOS,这增加了工具链的复杂性。

Flutter 和 React Native 使用的语言

Flutter 使用 Dart 编程语言,该语言也是由 谷歌 开发的。 Dart 具有完善的类型,这是一种类型系统,可以保证在编译时知道变量的类型。这代表着运行时类型错误是不可能的,这能帮助并引导减少代码库中的错误数量。

React Native 使用 JavaScript,它在 Web 开发方面拥有丰富的历史和广泛的在线资源。它可以与 TypeScript 结合以提供静态类型,但仍然很大概率会出现运行时类型错误。

Flutter 和 React Native 使用的 UI 组件

Flutter 附带了一组丰富的预先设计的小部件,这些小部件遵循特定的设计语言,例如 Material Design 和 Cupertino。这些小部件能帮助并引导为 安卓 和 iOS 平台创建具有视觉吸引力且“本地行为”的应用程序。但是,您还可以使用高度可组合的小部件创建自定义设计系统。

React Native 使用本机组件作为构建块,因此提供了本机应用程序的外观、感觉和性能。

现在我们已经快速概述了 Flutter 和 React Native,叫我们从初级开发人员、高级开发人员和 CTO 的角度深入探讨每个框架的权衡。

作为初级开发人员,Flutter 与 React Native 对比

作为初级开发人员,您的主要职责通常是通过您创建的代码为用户带来价值。您可能对工具和框架缺乏经验,因此您想到的问题可能是:

  • 哪个框架可以提供最佳的开发者体验(DevX),以便我能够尽快为用户交付价值?
  • 哪个框架最能帮助我作为开发人员成长?
  • 哪个框架可以帮助我将来找到工作?

这些问题的 TLDR 是:

  • Flutter 擅长开箱即用的 DevX 和简单的工具链。
  • React Native 擅长提供大量资源和工作机会。
  • 这两个框架都将帮助您成长为一名开发人员,但方式不同。为我,
  • 我花了更多时间在 Dart/Flutter 中学习 OOP 和应用程序架构。这是因为 Flutter 以其简化的工具链节省了我大量的开发时间,叫我可以将更多时间花在设计模式和代码库结构上。
  • 在 JS/React Native 中,我花了更多时间学习 JS 生态系统并且还有如何调试复杂的工具链——这些东西通常在 Flutter 中被抽象出来。这对我来说成为了一项与框架无关的技能,但作为初级开发人员学习起来却很让人沮丧。

作为高级开发人员,Flutter 与 React Native 对比

作为一名高级开发人员,开发人员经验等因素可能变得不那么重要,因为您已经得到了解决 DevX 障碍的技能、知识和工具。相反,您可能关心的问题是:

  • 该框架如何帮助我的团队更快、更智能地工作?
  • 哪个框架的工作稳定性更高,以便我可以养活我的家属?
  • 哪个框架具有更高的技能上限,以便我能够作为开发人员继续成长?
  • 未来更有可能使用哪种框架? -->

这些问题的 TLDR 是:

  • Flutter 擅长依赖注入、端到端测试和 UI 标准化,这将帮助您的团队更高效地工作。
  • React Native 在可用软件包的数量方面表现出色,这代表着其他人可能已经解决了您面临的问题,最终节省了开发时间。

作为 CTO,Flutter 与 React Native

作为 CTO,您负责公司的技术方向,并且需要做出能帮助并引导公司实现业务目标的决策。您可能关心的一些问题是:

  • 该框架是否具有我们实现业务目标所需的功能?
  • 每个框架能做什么来帮助我们用最少的资源实现目标?

每个框架的主要优点是:

  • Flutter 擅长复杂 UI 和 UI 标准化。如果复杂的动画是您的应用程序的关键要求,并且 UI 一致性对您的品牌形象很重要,那么这将非常有用。除此之外,Flutter 的 UI 标准化能帮助并引导减少错误数量以及修复平台和设备相关错误所花费的资源。
  • React Native 在资源量、Web 支持和 OTA 更新方面表现出色。同样,其他人已经解决了您的问题这一事实代表着您可以节省开发时间和资源。除此之外,Web 支持代表着您可以借助 SEO 部署到 Web,这是相比较 Flutter 的一个关键优势。最后,OTA 更新允许您向用户推送更新,而无需经过应用商店审核流程,这可以节省大量时间。

用例

在本节中,我们将介绍一组潜在的场景和我的建议。当我们遍历每个场景并列出需要考虑的问题时,前面的部分应该能帮助并引导触发您的头脑。

我想为移动、桌面和网络构建一个带有 SEO 的应用程序(例如 Medium、Reddit)

如果您希望构建像 Medium 这样的应用程序,其中应用程序中的大部分内容需要可抓取,那么 React Native 可能是更有吸引力的选择。

桌上的选项有:

  • React Native 适用于桌面和移动设备,NextJS 适用于 Web
  • 适用于桌面、移动和 Web 的 React Native。
  • Flutter 适用于移动和桌面,NextJS 适用于 Web

React Native + NextJS:提高 SEO 的最佳方法之一是在 React Native 应用程序中使用像 NextJS 这样的服务器端渲染框架。 React Native 组件可以直接导入 NextJS,允许您构建通用应用程序以实现功能和设计的一致性。有关示例,请参阅reactnative-nextjs-template或luna 。

仅 React Native:在所有平台上使用 React Native 将使您的堆栈中少一个框架,但您需要找到一种方法使您的应用程序可在网络上爬行。

Flutter + NextJS:这将使您能够坚持 SEO 最佳实践,同时得到 Flutter 的优点。但是,这代表着您需要一个能够在这两种框架中进行开发的团队。

在做出决定之前您应该问自己的问题:

  • 移动/桌面和 Web 之间需要共享多少代码?
  • 哪些内容需要进行 SEO,以及进行到什么程度?
  • 我的团队有哪些技能?
  • 该应用程序需要哪些功能,有没有现有的库?
  • 我正在构建的应用程序有多复杂?

我想构建一个适用于移动、桌面和网络的应用程序(例如 Spotify)

如果您希望构建像 Spotify 这样的应用程序,其中您的成功标准之一是跨平台保持一致的 UI 和 UX,而 SEO 并不那么重要,那么 Flutter 可能是更有吸引力的选择。

桌上的选项有:

  • Flutter 适用于移动、桌面和 Web 应用程序,NextJS 适用于网站
  • React Native 适用于移动、桌面和 Web,NextJS 适用于网站

Flutter + NextJS:使用 Flutter 提供应用程序体验,使用 NextJS 作为登陆页面,可以防止与在 React Native 中使用本机组件相关的所有平台和设备特定的错误。在 NextJS 中开发网站可以保持 SEO 友好,同时仍然允许您在需要时将 Flutter Web 应用程序作为 SPA 嵌入。

React Native + NextJS:使用 React Native 能够让您与 Next 网站共享设计元素,最终节省设计成本。

在做出决定之前您应该问自己的问题:

  • React Native 应用程序和 NextJS 网站之间可以共享多少设计元素,这将节省多少资源?
  • 我的团队有哪些技能?
  • 该应用程序需要哪些功能,有没有现有的库?

我想构建一个移动应用程序,并且想要本机行为(例如本机滚动、精美的 iOS 组件)

如果您希望构建一个目标用户对非本机行为(例如滚动)敏感的应用程序,那么 React Native 可能是更有吸引力的选择。

桌上的选项有:

  • 适用于 iOS 和 安卓 的 React Native
  • 适用于 iOS 和 安卓 的 Flutter

使用 React Native 将使您能够了解 iOS 和 安卓 中本机组件的外观和行为。除此之外,iOS 组件以其精美和高性能而闻名,这是一个额外的优点。

虽然使用 Flutter 不会给您带来与 iOS 相同的原生外观和感觉,但它可以为 安卓 带来显着的优势,因为在许多 安卓 变体中,原生 UI 元素有时会出现不可预测的行为。在这样的情况下,Flutter 提供的一致性可能很难通过 React Native 甚至原生 安卓 开发来实现。

在做出决定之前您应该问自己的问题:

  • 我的目标是多少个 安卓 平台,UI 有多复杂?在 安卓 中使用本机组件的优点会超过很大概率会出现的视觉错误吗?
  • 我的团队有哪些技能?
  • 该应用程序需要哪些功能,有没有现有的库?

结论

没有最好的框架,只有您需要根据您的用例进行权衡