首发于公众号 前端混合开发,欢迎关注。
如果你想要构建一个iOS应用,你可以选择相当多的语言和框架来进行工作。React Native 和 Swift 就是其中的两种工具。
React Native 是来自Facebook的一个JavaScript库,用于创建兼容iOS 和 Android 的跨平台应用。它允许你使用熟悉的语法来利用原生功能。Swift是由Apple开发的一种编程语言,逐渐取代了Objective-C
。Swift专门用于构建iOS应用。
在选择这两者中的哪一个进行iOS开发之前,你首先需要问自己的问题是,你是否打算构建一个跨平台应用或一个iOS原生应用。当然,在做出这个选择之前,还有其他因素需要考虑。
在这篇文章中,我们将根据多个因素,从性能到易用性,评估这两种技术。
React Native 如何构建一个iOS应用
React Native 的工作方式与React类似,只是React Native不使用虚拟DOM来操作DOM。在底层,React Native解释JavaScript代码,并使用API与原生组件进行通信。所有数据都在一个桥接中序列化,这禁止了用户交互。
React Native 通常被认为有两个独立的部分:JavaScript代码和原生代码(iOS和Android)。实际上,连接这两者的是一座桥梁,尽管它们是不同的语言,但这座桥梁允许双方进行通信。所有从JavaScript发送到原生代码的数据都以序列化的JSON对象的形式传输。这些数据可能是你的UI元素,函数等。
最后,我们的原生iOS模块,如 FileReader
、 DeviceInfo
等,与iOS SDK进行通信,实现它们相应的原生功能。
Swift如何构建一个iOS应用
Swift 是为了替代Objective-C在构建苹果软件中的使用而开发的。它被包含在Xcode中,Xcode是苹果的IDE,用于编写和开发应用程序。Swift使用的是LLVM编译器,该编译器仍然包含在Xcode中。
React Native在iOS开发中的优点和缺点
无论一门语言多么优秀和可靠,它都不可避免地会有一些缺点。公司选择Swift或其他工具而不是React Native,并不意味着React Native是一个糟糕的移动开发工具;相反,它只是不适合他们的业务或产品使用场景。总的来说,React Native提供了许多优点。
优点
- 对非移动开发者来说学习曲线较低:Web开发者可以使用React Native直接进入移动开发,因为说到底,它只是JavaScript代码。即使你仍然需要学习一些原生概念,学习时间也会更短。
- 热重载:代码中的UI更改不需要重新构建应用程序。这也有助于更快的开发和错误修复。
- 基于组件:你可以编写代码并重复使用。像按钮和卡片这样的组件可以在你的代码库中或甚至在其他项目中随处使用——无需重写相同的内容。
- 成本效益:这可能并不适用于所有市场,但总的来说,构建iOS应用程序既节省时间又低成本
- 大社区:React Native拥有庞大且活跃的社区,使得寻找开发帮助和资源变得更加容易。社区通常能提供Stack Overflow上已经回答过的常见问题的答案和解决方案。你可以查看GitHub上的React Native社区,该社区有支持React Native生态系统的仓库。
弊端
- 更新版本中的未预见的变化
- 在处理大型项目时会遇到可扩展性问题。深度依赖设备硬件的复杂软件,如果没有使用原生代码构建,往往会遇到性能和可扩展性问题。请记住,React Native用来连接JS代码和原生代码的桥梁仍然使用额外的层,这可能会影响性能。
Swift 和 React Native 用户体验
Swift 和 React Native 都用于移动应用开发,但它们在用户界面(UI)和用户体验(UX)方面采取了不同的方法。
作为一种原生的iOS开发语言,Swift为苹果产品的用户提供了熟悉且可预测的用户界面和用户体验。使用Swift构建的应用程序可以访问苹果所有内置的用户界面元素,使其与其他原生应用程序具有一致的外观和感觉。然而,为特定平台设计可能会限制应用程序的覆盖范围和受众。
另一方面,React Native允许开发者构建可以在iOS和Android上运行的跨平台应用。它使用JavaScript和React来构建原生应用,允许开发者构建看起来和感觉像原生元素的自定义UI组件。
React Native还拥有大量预构建的UI组件库,使开发人员能更快地创建出精致、具有原生感觉的应用。然而,由于其跨平台的特性,React Native的UI有时可能与完全原生的应用感觉稍有不同。
Swift 对于iOS开发的优点和缺点
Swift是为所有苹果操作系统构建的,即iOS,iPadOS,macOS,tvOS等等。Swift的主要优点就在于它的名字——它很快。但是,像往常一样,也有一些缺点需要与优点进行权衡。
优点
- 类型安全:Swift 提供了一个安全且强大的类型系统,并拥有良好的错误处理方式。这在最大程度上防止或减少了错误。
- 可扩展且可维护:Swift让你能够专注于应用程序的核心基础设施。更简洁的语法使代码更易读和维护。
- 性能:Swift的创建是为了在开发移动应用方面超越Objective-C。使用Swift构建的应用已被证明比使用Objective-C构建的类似应用快2.6倍。
- 得到苹果的支持:Swift是由苹果构建和维护的,所以你可以安全地假设你的应用将是未来的防护。它也是开源的。
弊端
- 缺乏对旧版本的支持
- 相对昂贵/竞争激烈的工作市场,难以找到专门的Swift开发者。
- 你必须使用Xcode,并且只能在Mac和其他Apple设备上工作
哪个对性能更好?
使用Swift进行真正的本地开发在性能上胜出——不仅仅因为它是Swift,而是因为它允许直接访问本地设备硬件和API。
这并不意味着React Native的性能不佳;默认情况下,它的性能是很好的。话虽如此,当你使用React Native进行iOS开发时,你需要采取一些措施来确保你的应用运行快速且可靠:
使用替代的图像缓存组件
考虑使用外部的 react-native-fast-image 来渲染图像。React Native 确实提供了一个内置的 Image 组件,但有时它可能导致性能不佳,特别是在处理屏幕上的大量图像或出现闪烁时。
- 更快的图像加载和渲染:在某些情况下,这个库的性能特别优化,可以比内置的 Image 组件更快地加载和显示图像
- 改善内存使用:在显示图像时,它可以使用更少的内存,这有助于防止内存溢出错误,并提高您的应用程序的整体性能。
实际上, FastImage (外部库)是围绕着用于原生iOS开发的流行库SDWebImage的一个封装。
使用Hermes
Hermes已经在Android的APK中可用了一段时间,它有助于减少应用程序下载大小、内存使用等。它还可以减小下载大小,缩短应用程序可用所需的时间,并减少内存使用。对于iOS的支持,Hermes仍处于早期阶段。
要在你的应用程序中使用Hermes,将你的 Podfile
中的 hermes_enabled
设置为 true
,然后运行 pod install
use_react_native!(
:path => config[:reactNativePath],
# to enable hermes on iOS, change `false` to `true` and then install pods
:hermes_enabled => true
)
拥抱记忆化
这是一种特定类型的缓存,它返回已经被缓存的函数的相同值。仅此一项就可以加速程序并提高性能。
我不得不对React Native的性能优化进行更多的解释,因为Swift显然是这里的赢家——它是原生的,除此之外没有太多可以说的。但这并不意味着React Native在某些使用场景下不够强大。
哪个的开发周期更快?
React Native在满足同时在iOS和Android上发布应用的标准方面表现出色,因为它使你能够构建一个在两个平台上无缝运行的单一应用。此外,React Nati
ve组件大多来自Web(React),可以直接复制过来,加快了开发过程。
此外,React Native提供了热重载和实时重载功能,这意味着你不需要多次重建你的应用程序。仅此一点就能促进快速的开发周期。
然而,你需要理解的是,开发周期取决于各种因素,如应用程序的复杂性,开发人员的技能和经验,以及可用的资源。Swift(用于iOS)和React Native都因其流线型的流程而为你提供快速的开发周期。
何时使用Swift,何时使用React Native
React Native和iOS都是两个强大的工具,各自在各自的领域做得很好。现在选择使用哪一个取决于你,最终取决于你想要构建的项目类型。
以下是我的意思。Swift更适用于:
- 需要大量资源,具有高内存管理需求和复杂用户界面的应用程序
- 将来肯定会扩展或连接到其他Apple产品的应用程序 - 换句话说,主要面向iOS和macOS用户的应用程序
- 需要长期升级或维护的应用程序
许多App Store上的应用程序使用Swift,因为它是由苹果公司本身原生支持的。所有的苹果应用程序,Airbnb,LinkedIn,Slack和Firefox,都是使用Swift语言编写的。
React Native将更适合于:
- 需要在较短或有限的时间内由少数开发者开发的应用程序
- 需要跨平台功能的应用程序
总结
总的来说,Swift默认会生成性能更优的iOS应用,但是了解RN提供的强大性能和良好的开发体验也是很好的,特别是现在Hermes帮助减少了下载大小和内存使用。归根结底,根据你的应用需求选择正确的工具绝对是你能做的最好的事情。
交流
首发于公众号 大迁世界,欢迎关注。📝 每周一篇实用的前端文章 🛠️ 分享值得关注的开发工具 ❓ 有疑问?我来回答
本文 GitHub https://github.com/qq449245884/xiaozhi 已收录,有一线大厂面试完整考点、资料以及我的系列文章。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。