跨平台开发一直是一个挑战——为了换取更低的成本和更短的开发时间,开发人员不得不牺牲性能或用户友好性。但是,随着 React Native 或 NativeScript 等框架的出现,这些限制不再适用。目前,开发人员可以使用单一代码库和完美的性能构建本机应用程序。他们甚至可以将该代码库应用于同一个应用程序的 Web 等效项。
有很多工具可以让开发人员构建跨平台应用程序。他们都有相同的目标:创建具有自然感觉和功能的高质量移动应用程序,而无需维护两个或多个代码库的过多开销。
在本文中,我们将比较两种流行的跨平台移动开发框架 - NativeScript 与 React Native - 并尝试确定一种相对于另一种的优势。
开始吧!
什么是 NativeScript?
NativeScript是由 Telerik(Progress Software)创建的框架。虽然它不像 React Native 那样大肆宣传,但一些国际知名公司(如 Raiffeisen Bank)还是支持 NativeScript。SAP 是全球最大的 ERP 公司,也是使用 NativeScript 的公司。该公司已决定使用此框架来构建其移动开发工具包。
**NativeScript 是一个用于构建跨平台原生移动应用程序的平台。**它允许开发人员使用 XML、CSS 和 JavaScript 来构建 Android、iOS 甚至通用 Windows 平台应用程序。与 Cordova 使用 WebView 来呈现应用程序的 UI 不同,NativeScript 使用原生平台呈现引擎,这意味着它提供了真正的原生用户体验。
NativeScript 由一个 JavaScript 虚拟机、一个运行时和一个桥接模块组成。JS 虚拟机解释并执行 JavaScript 代码。然后桥接模块将调用转换为特定于平台的 API 调用并将结果返回给调用者。简单地说,NativeScript 为开发者提供了一种通过 JavaScript 而不是:
- iOS上的Objective-C;
- 安卓上的Java。
什么是 React Native?
React Native基于 Facebook 的 React Web 框架。自 2015 年首次发布以来,其声誉和社区稳步增长。自然,大多数 Facebook 旗下的公司都使用 React Native 作为他们首选的移动平台。然而,它的名气更进一步,达到了特斯拉、优步和沃尔玛。
所以 FB 的人认为如果他们可以使用 React 来构建跨平台的移动应用程序会很棒,并且在 2015 年 React Native 向公众展示并出现在 GitHub 上,每个人都可以在那里做出贡献。
在 RN 中,代码是用 JavaScript 编写的,并使用 JavaScriptCore(Safari 引擎)执行。您还可以使用本机平台模块,例如相机或蓝牙。为此,编写代码以用于特定平台(Java / Swift / Objective C)的开发语言实现功能,并通过桥与 JavaScript 环境进行通信。
您可以在我们深入的React Native 开发指南中找到有关此技术的更多信息!
我们为什么要比较它们?
经验表明,移动应用程序开发人员倾向于将他们的技能和努力主要用于使用这两个框架构建移动应用程序。一场 React Native 与 NativeScript 的较量甚至已经开始。
在我们的博客上,您可以找到诸如React Native 与 Swift、Xamarin 与 React Native、React Native 与 Ionic以及React Native 与 Flutter 之类的比较。
现在是比较 NativeScript 和 React Native 的时候了。
那么,是React Native 开发者还是 NativeScript开发者?哪种技术更好?它们有何不同?它们有什么共同点,什么时候使用一个比另一个更有意义?
为了回答这些问题,让我们扩展我们对这些工具的了解并比较它们最显着的差异。
NativeScript 与 React Native:编码速度和编码简单性
React Native 在某种程度上改变了开发速度。与 NativeScript 不同,这个框架包含可重用的组件。这是什么意思?创建用户界面组件后,您可以在各种应用程序屏幕中使用它。
在开发工作流程方面,这些框架使用相同的方法和步骤:
- 创建一个新项目
- 使用组件或小部件创建用户界面
- 应用布局和自定义样式
- 在模拟器/模拟器上测试您的应用
- 添加所需的功能
- 安装包
- 运行测试并调试应用程序
- 提交更改
好吧,您了解工作流程的样子。Chrome DevTools 允许您调试 NativeScript 或 React Native 应用程序。缺点之一是该工具没有元素检查器。应用内视图检查器仅对简单应用有用。为了解决这个弱点,NativeScript 开发人员使用一个扩展进行调试:Visual Studio Code,而 React Native 开发人员使用React Native Debugger或Reactotron。
获胜者:React Native
NativeScript 与 React Native:性能
为了快速访问原生 API,NativeScript 应用程序有一个单线程模型。此外,该框架基于 Angular、VueJS 和 JavaScript,因此应用程序在执行密集代码时可能会冻结。
NativeScript 提供缓慢的渲染,在一个每秒都算数的世界中,这很难接受。这就是 React Native 的用武之地。
React Native 性能是一种多线程方法:JS 和 UI 运行在不同的线程上。这加快了对本机 API 的访问。React Native 应用程序使用虚拟 DOM 来更新和同步 UI 组件。因此,基于 React 的应用程序比基于 NativeScript 的应用程序更快。
获胜者:React Native
NativeScript 与 React Native:代码共享
代码共享也可以与 React Native 和 NativeScript 相媲美。以两者之一编写的应用程序可以共享多达 90% 的代码库。通常,应用程序越简单、定制化程度越低,您可以共享的代码库就越多。
NativeScript 和 React Native 都有大量的原生组件。
实施后,它们将被编译为默认样式,这可能需要单独的样式以满足正在开发的特定于平台的应用程序的需求。
React Native 强调每个平台的样式组件,以赋予其更好的自然外观。
另一方面,NativeScript 更像是一种一次编写、随处运行的方法,尽管我们也可以单独设置其组件的样式以类似于本机应用程序组件。
但是,当许多本机平台组件开始发挥作用时,代码共享的百分比会降低。
判决:平局
NativeScript 与 React Native:文档
这两个框架都很老,这为它们提供了广泛的文档基础。每种技术都为其开发人员提供了寻找答案和阅读有关特定工作流方面的更多信息的机会。
至于 NativeScript,社区继续创建文档和资源。
谈到 RN,鉴于其著名的根源,文档可能比现在更加明确和清晰。但是,经验丰富的开发人员仍然可以在这里找到他们需要的一切。
判决:平局
NativeScript 与 React Native:流行度
不能否认,如果说到两者之间的人气比拼,React Native 会名列前茅。它是所有现有应用程序开发环境中最受欢迎的跨平台应用程序开发环境,包括 Xamarin、Ionic、Flutter,当然还有 NativeScript。
当您考虑到 Facebook 开发了 React Native 时,我们可以很容易地解释它几乎从一开始就享有的人气激增。此外,根据2019 年 JavaScript 现状调查,React Native 支持是使用它的开发人员中第三个最受欢迎的框架方面。
广泛流行意味着快速增长,这要归功于许多活跃的贡献者和关于您在开发过程中可能遇到的几乎任何问题或问题的丰富信息。
StackOverflow 上关于React Native 的问题比NativeScript多 10 倍以上。
此外,查看数字真正受欢迎程度的一个很好的标志是来自谷歌趋势的数据。
在这里我们可以看到 NativeScript 甚至无法接近 RN 的搜索查询。
然而,重要的是要记住,受欢迎程度并不是这项业务的全部。还有其他因素需要考虑。但是,不要忘记 Facebook 开发了 React Native,因此将这项技术推向市场并使其可用要容易得多。
获胜者:React Native
NativeScript 与 React Native:社区
这两种工具都有强大的专家社区,但区别很明显。React Native 由 Facebook 创建,Facebook 是当今领先的 IT 公司之一。创建者和整个社区每天都在为 React Native 功能添加不同的插件。
因此,社区发展得更快。
NativeScript 也是开源的,但是开发速度慢。插件比较少,有的甚至还没有通过尽职调查。
显然,React Native 社区更大,也更成熟。
获胜者:React Native
NativeScript 与 React Native:人才库
鉴于 RN 的巨大人气,找到具有 React Native 经验的开发人员比使用 NativeScript 容易得多,而且可用的开发人员池要大得多。
当您需要快速启动一个新项目并快速组建一个经验丰富的团队来解决它时,这一点尤其重要。
这里一个不错的来源是Stack Overflow Research。它向我们表明 RN 受到 59.7% 的受访者的喜爱,而 NativeScript 甚至没有在这个评级中出现。
为了把这个数字化,我们决定展示 GitHub 统计数据:
- React Native:2250+ 贡献者;
- NativeScript:目前已有190 多个贡献者。
获胜者:React Native
NativeScript 与 React Native:易于学习
NativeScript 和 React Native 都依赖于 JavaScript 代码,这使得它们对前端团队非常有吸引力。如果您的员工熟悉 ReactJS(以及 Redux、Immutables 和 Repositories),那么它们应该相对容易与 React Native 一起使用。
另一方面,NativeScript 使您可以完全自由地使用您喜欢的任何 JavaScript 框架编写代码。最受欢迎的组合包括:
- NativeScript + Angular,
- NativeScript + 打字稿,
- NativeScript + vanilla JS,
- NativeScript + VueJS。
但是,如果您或您的团队以前不熟悉跨平台,那么学习曲线可能会非常陡峭。引入经验丰富的顾问和移动开发人员来帮助将知识和最佳实践传递给您的团队是有意义的。
一方面,选择 React Native 意味着你只需要 JavaScript。另一方面,NativeScript 通过维护声明式编码风格为您提供更多自由。这意味着,如果您对一个框架中的特定功能不满意,您可以使用任何其他 JavaScript 框架,包括 Angular、TypeScript 和 Vue.js。
获胜者:NativeScript
NativeScript 与 React Native:测试
React Native 使开发人员可以完全自由地选择最方便的测试自动化环境,例如 IDE。您可以使用任何适合您的测试工具:
- Robotium,
- Appium,
- Calabash,
- uiautomator,
- Espresso,
- Jasmine,
- UI Automation,
- TestNG,
- Frank,
- KIF, and many more.
NativeScript 提供了使用自己的 QA 工作流的能力,该工作流于 2017 年作为开源发布。就测试本身而言,您可以使用 Jasmine、Mocha 或 Quint 从 NativeScript CLI 直接运行单元测试。
另一方面,功能测试可通过许多外部提供商进行,其中一个是 Appium。
判决:平局
NativeScript 与 React Native:开发成本
React Native 可以为您节省高达40% 的开发成本和大量时间,尤其是对于初创公司。
但是,这两种解决方案都可以为您节省大量开支。由于我们谈论的是跨平台的,像代码共享这样的功能是一个巨大的好处。考虑到它可以显着节省构建应用程序所需的时间、成本和劳动力,这是巨大的。
此外,分布在整个基础架构中的单一技术堆栈极大地简化并降低了开发和维护成本。
判决:平局
想要刷新您阅读的所有内容吗?这是关于我们谈到的每一点的快速汇总表。
主要优点和缺点
NativeScript 的优点
- 它是开源和免费的。这一事实意味着您可以为代码做出贡献并按照您认为合适的方式使用它。但请确保您没有违反Apache 2.0 许可。
- 这使您可以为 Android 和 iOS 设备创建真正的本机应用程序。NativeScript 提供的每个用户界面组件都被翻译成它们对应的本地用户界面组件。
- 它允许您通过 JavaScript 代码访问本机平台 API。您无需了解 Java 或 Objective-C 即可使用本机平台 API,因为您可以用 JavaScript 编写所有内容。这意味着,如果您需要访问特定的设备功能,您只需学习如何使用 JavaScript 访问本机 API,就可以了。
- 这为用户提供了比 Cordova 等混合移动应用程序更自然的体验。
- 开发人员能够通过 Telerik 平台轻松构建、部署和管理他们的 NativeScript 应用程序。
- 它对新平台提供零日支持。这意味着每当 Google 或 Apple 更新其平台时,您都可以立即使用最新的本机 API 和 UI 组件。
- 该文档包含大量有关如何入门、基本概念和用户界面的信息。还有示例、教程、论坛、Stack Overflow 问题和示例应用程序,可以帮助新手学习 NativeScript。
- 您可以使用 TypeScript 编写您的 NativeScript 应用程序。TypeScript 是一种继承到 JavaScript 的语言,并为 JavaScript 添加了面向对象的编程功能。
- 您可以在npm中找到的任何与浏览器和 DOM 无关的JavaScript 库都可以在 NativeScript 中使用。此类库的示例涉及实用程序库,例如lodash和underscore。
- 您几乎可以使用 NativeScript CLI 做任何事情。此外,还包括创建新项目、添加平台、在设备上运行以及部署到特定平台等基础知识。
- 或者,您也可以安装插件、调试应用程序并将其上传到应用程序商店。
NativeScript 的缺点
- NativeScript 没有 HTML 和 DOM。您将需要学习如何使用各种 UI 组件为您的应用程序创建 UI。
- 没有测试插件。虽然npm 上有许多 NativeScript插件,但您永远无法确定它们的质量。
- 开发人员需要了解原生 Android 和 iOS API 才能访问设备硬件和其他特定于平台的功能。
- 由于其性质,您只能在真实设备或模拟器上测试应用程序。这会减慢初始测试设置的速度。但是一旦你在你的设备上运行它,热重启就会接管。这意味着每次对源代码进行更改时,它都会立即重新加载应用程序以反映更改。
- 并非所有用户界面组件都是免费提供的。如果您想使用图表和日历等组件,您需要为 NativeScript 购买 Telerik UI。
React Native 的优点
- React Native 的优势在于,基于知名的 React 库进行开发,但同时,应用程序的展示就像是针对各个平台原生开发的一样。
- 原型应用程序的交付时间要短得多。React Native 开发以模块化方式进行。该应用程序实际上是由“砖块”组装而成的。
- 各个模块相互适应和集成。经验丰富的员工可以立即准备此类应用程序。花费更少的时间可以为客户降低应用程序的成本,这在 MVP 阶段非常重要。
- Android 和 iOS 无需单独开发。您的应用程序是使用中间库启动的。因此,创建的应用程序在 iOS 和 Android 上运行得同样好。如果需要对特定组件进行任何更改,它将同时针对两个平台进行更新。
- 进一步的应用程序支持和开发更容易。劳动力市场中熟悉 React Native 的专家数量每天都在增加。因此,应用程序支持可以更便宜。如有必要,如果公司在员工中有合格的专家,则以后可以自行进行。
React Native 的缺点
- 应用程序更重。由于 React Native 是软件框架生态系统中的中间体,因此用 React 开发的应用程序会比使用 Apple 或 Google 的原生库构建的应用程序大一些。因此,例如,如果您为忠诚度计划或咖啡馆预订餐桌创建应用程序,那么在 React Native 上,您将不需要 15 兆字节的手机内存,而是需要 25-30 兆字节的手机内存。然而,在大多数情况下,考虑到卡的容量和宽带速度,这对用户对应用程序的评价几乎没有影响。
- 观察到生产率下降。由于在 React Native 中开发的应用程序的任何操作都经过中间库,因此它们的速度会略有放缓。但是,如果您的移动程序不进行任何计算,那么没有人会注意到处理器负载增加了 2% 而不是 1%。
- 当应用程序的大小足够大时,就会出现困难。我们谈论的是一个非常复杂的软件环境,它占用了数百兆字节的手机内存。性能也是如此。拥有额外基础设施的缺点只会影响直接在移动设备上编码、执行某些计算或处理大量数据的工程或计算应用程序。
何时使用 NativeScript 与 React Native?
NativeScript 有什么用?
- 您的应用程序很简单,包含 iOS 和 Android 共有的功能。
- 您想将 Angular 用于 Web 组件。
- 您需要自己的自定义界面,并且您不了解 Objective C 或 Java。
- 您即将迁移到 Angular 或 Vue 移动 Web 应用程序。
著名的 NativeScript 应用程序:
1.Daily Nanny。该应用程序协调和监控保姆并检查孩子的状况。
一旦你有了一个应用程序的想法,就用 NativeScript 创建一个 MVP 并在战斗中测试它。您可以快速启动具有关键功能的跨平台应用程序,然后慢慢开发原生应用程序,监控市场和用户反应的变化。
2. Regelneef。该应用程序监控能源消耗并预测下个月的成本。
客户的移动应用程序将允许他们在移动设备上控制他们的帐户,从而提高忠诚度。集成到应用程序中的聊天机器人将降低顾问的工资成本。您不必为此订购本机开发。也许您的业务需求正在由混搭处理。
React Native 有什么用?
- 你想用自己的接口来实现自己的性能
- 您希望通过特定平台(而不是第三方插件)访问某些硬件功能
- 您想很快(例如,在 12 周内)为 Web 和移动设备创建 MVP。
一些很好的例子:
- UberEats.。随着React Native的集成,餐厅仪表板的更新版本已成为大多数 UberEats 餐厅熟悉的工具。这反过来又帮助扩大了 Uber 的客户群,并使 UberEats 成为美国顶级的食品配送服务之一。
- Walmart。在 React Native 的帮助下,沃尔玛为 iOS 和 Android 编写了该应用程序的版本,雇佣了 1 个开发团队而不是 2 个。因此,他们将劳动力成本减半。得益于快速的开发周期(React Native 的真正优势),该团队能够加快应用程序的发布日期,击败主要竞争对手,并满足客户的需求。
概括
可以看到,RN 在很多方面都大大超过了 NativeScript。但是您可能已经猜到,这种比较不会宣布明显的赢家。最终判决取决于是否有具备任何结构知识的可靠且经验丰富的专业人员。