开源式框架Xamarin与React Native大比拼

译文
开发 前端
本文通过对Xamarin和React Native在市场份额、代码编译、SDK环境等方面进行比较,方便您理解它们的基本原理,并在实际项目中做出明智的选择。

【51CTO.com快译】有统计表明:目前,全球共有52.2亿人正在使用着移动设备,其中有46.6亿人会用设备来访问各种移动应用。显然,创建新的应用程序,已经成为了企业在激烈竞争中的标配。

[[384372]]

目前,可用于应用开发,特别是移动应用开发的技术与框架,可谓林林总总。其中最常见的当属Xamarin和React Native。它们都支持跨平台式开发,也都能够提供“一次性编写,各处部署(Write once and Deploy anywhere.)”的功能。不过,鉴于它们在市场份额、代码编译、SDK环境等方面的差异性,本文将通过对两者进行比较,以方便您理解其基本原理,并在实际项目中做出明智的选择。

什么是React Native?

React Native是基于JavaScript和JSX的开源式框架,由Facebook于2015年创建并启用。其目的是为iOS和Android构建原生的应用程序。

其中,JSX代表了XML-Esque标记的合并,而且能够在React Native框架中被使用。React可以将应用程序运行、并渲染到目标设备的原生平台上。据此,各种应用程序将具有,与使用原生应用开发框架(如Java for Android或Objective-C for iOS)所构建出的应用,同等的性能。同时,React Native移动应用开发还允许开发者创建特定于某个平台的组件版本。由于具有单独代码库,因此这些组件可以在不同平台上被共享使用。

统计显示:截至2020年,全球有42%的开发人员正在使用React Native来构建,能够在99%的移动设备上运行的应用程序。Facebook、Walmart、Bloomberg和instagram等明星企业都正在使用React Native,来开发其移动应用。

React Native的优势

  • 可扩展的社区支持:全球开发爱好者们在React Native社区中分享了大量的知识,并提供着热情的支持。该社区中的每个人也都可以免费访问,那些可用于移动程序开发的大量免费组件。
  • 实时热重载:React的实时重载功能,可以让框架实时地编译和读取开发人员做出的更改。也就是说,它会在并不实际重载的情况下,验证各项变更,并刷新整个应用程序。而热重载则体现在为模拟器提供新的文件时,从一开始就能读取整个文件,以更新各项变更。在此,它只会更新已更改的组件。
  • 代码可重用性:React Native是减少代码量的首选。它可以让开发人员重用90%的代码,以构建iOS和Android应用程序。此外,由于代码只需少量修改,便可实现重用,因此React Native也节省了大量的开发时间。
  • 第三方插件支持:由于React Native不可能在同一个框架中包含所有的组件,所以开发人员在使用该JavaScript驱动型框架时,可以利用地图、双因素身份验证等第三方功能,来渲染或增强React Native应用。
  • 提供最佳性能:应用程序的性能,以及提供更佳客户体验的能力,直接取决于构建应用的框架。由于开发人员可以利用React Native的原生模块和组件,来构建应用,因此他们可以创建互不干扰的原生API和程序代码。也就是说,他们能够以较低的代码量和较快的开发周期,来创建以性能为中心的应用程序。

什么是Xamarin?

由Microsoft创建的Xamarin,目前在开发社区中的占有率仅为14%(2019年曾为26%,https://www.statista.com/statistics/869224/worldwide-software-developer-working-hours/)。虽然与React Native相似,但是Xamarin更适合.Net的开源平台。

Xamarin的主要功能是:维持共享代码和平台代码之间的通信。Xamarin通过使用独立于平台的工具和代码库,来扩展.Net开发者平台的各项功能。同时,Xamarin可以使用底层平台所提供的全部功能。也就是说,当应用程序运行在Android上时,它会利用特定于平台的各项功能,来提供预期的用户体验。该特性同样适用于运行在iOS设备上的应用程序。此外,Xamarin还能够用到基础平台的硬件加速功能。

Xamarin的优势

  • 一种技术栈:作为具有内置多项技术的生态系统,Xamarin能够让开发人员一次性构建多平台的应用程序。例如:使用在.Net框架上运行的C#语言,开发人员可以实现96%的代码重用。当然,他们也可以用到.Net和Visual Studio。
  • 共享代码:Xamarin旨在通过通用的代码库,方便用户开发出可以运行在不同平台上的应用。同时,应用之间可以共享相同的业务逻辑、数据库访问、以及网络通信。而开发人员唯一需要更改的只是用户界面,以保证应用在每个平台上,都具有原生的观感。
  • 原生性能:与其他跨平台的开发工具相比,Xamarin能够提供高度原生、且无与伦比的应用性能。在图像加载速度方面,Xamarin只比原生应用慢14%。
  • Xamarin Forms可提供流畅的用户体验:Xamarin.Forms具有100%的可重用代码API组件和元素库。开发人员可以使用内置的Xamarin.iOS,来自定义各种元素。当然,它在Android平台上也同样适用。
  • 代码库数量的增加:过去Xamarin没有广泛的代码库,可供开发人员使用。如今,Microsoft开发团队正在持续构建各种常见的用例和组件。例如:Xamarin能够提供双因素认证(2FA)之类,可以被直接插入使用的代码库。

开发人员该如何选择?

通过上述介绍,我们不能发现,虽然两者有着相似的功能,但是React Native比Xamarin具有更大的开发人员基础。下面,我们从各项原始特性出发,帮您梳理出它们各自不同的适用场景。

编译

它们的跨平台开发功能--Just-in-time(JIT),能够使开发人员在运行时(runtime)中,编译字节码或源代码。不过,在Android允许JIT之处,iOS不允许JIT限制任何形式的跨平台应用开发框架。

  • React Native:由于JIT在iOS上是不允许的,因此源代码中的任何更改,都会要求开发人员退回到Android代码处进行更改。它们只有在完成之后,方可作为iOS应用被运行。
  • Xamarin:为了绕过此问题,Xamarin针对代码的编译,计算了提前时间(Ahead-of-time,AOT)。AOT编译器的任务是,分析字节码,并用机器语言对其进行编译,然后对所选择的路径执行相同的操作。这样虽然可以减少启动时间,提高应用程序的性能,但是也增加了文件的大小。同时,由于Xamarin在默认情况下已启用了JIT,因此您可以先配置AOT,再使用它。

性能

无论是原生的,还是由Xamarin开发的移动应用,都需要通过出色的性能,给用户留下良好的印象,并与之进行流畅的互动。

  • React Native:React Native中的Native Thread、JavaScript Thread、以及连接它们的中介网桥(mediator bridge),都能起到性能提升的作用。其中Native Thread通过网桥向JavaScript Thread发送信号。不过,由于JavaScript Thread可以处理的消息数量有限,因此在消息数增多时,应用程序的UI会出现滞后。我们可以通过使用为此目的构建的特定第三方库(例如Proguard),以更快的速度优化字节码。
  • Xamarin:虽然Xamarin.Forms的性能指标不及原生框架,但是作为弥补,Xamarin能够以较低的成本和更少的时间,来完成诸如处理API请求、序列化、反序列化、图像保存、以及加载等简单的开发任务。此外,由于Xamarin.Forms包含了Xamarin.Android和Xamarin.iOS,因此它们都能够让开发者自定义共享代码库,进而为用户提供原生的观感和体验。可以说,在某些操作中,Xamarin.Android甚至能够表现出比原生框架更好的性能。总的说来,Xamarin不但能够提高性能,还能够匹配原生框架的各项指标。

应用架构

应用架构是指那些能够构建出合理的编程模式与结构的开发框架。可以说,更强大、更快捷、更稳定的基础架构,往往可以让开发人员以最小的代价,来解决各类复杂的开发问题。

  • React Native:React Native体系架构由React、JavaScript(JSC)、Bridge和Native Side四个关键组件组成。那些习惯了使用单向数据流,和最新版JavaScript的开发人员,可以轻松地使用它。对于iOS React Native移动应用的开发而言,JavaScript Core为运行时(runtime)分离了所有的代码;而对于Android来说,则需要将它们捆绑到应用程序的内部。虽然将代码捆绑在一起,的确可以带来更好的原生性能,但是此举的代价是性能问题,随着应用本身体积的增大,滞后很可能会逐渐产生。
  • Xamarin:Xamarin支持不同的架构模式,其中包括:MVVM(模型、视图、视图和模型),MVC(模型、视图和控制器)、业务外观、单例(Singleton)、异步等。Xamarin对于那些习惯了使用ASP.NET、MVC、Web Forms、以及其他相关模型与视图工具的开发人员而言,非常容易上手。同时,Xamarin MVP非常适合那些由该框架构建的原生应用。当然,为了充分利用Xamarin,开发人员也可以采用MVVM模式。

可见,这两种框架在应用体系架构方面,表现得同样出色。

社区支持与协助

社区支持对于初学者与资深开发人员之间的问答、共享、以及相互学习,都是至关重要的。

  • React Native:虽说React Native是一个较新的框架,但是Facebook为其打造了庞大且可扩展的社区支持。目前,该社区拥有2200多个专业的开发人员和19800个实时项目。同时,它拥有专用的Discord频道和论坛,可帮助开发人员每天了解到该框架的最新信息。
  • Xamarin:Xamarin在开发社区方面根基较深。它在120个国家/地区拥有约140万名开发人员。与React Native类似,它也是一个开源的网络,因此各类贡献者可以通过协同努力,来彼此学习和成长。不过,与React Native的开放式社区不同,Xamarin提供了Xamarin BlogXamarin Q&A两种官方渠道。当然,其他类型的社区支持还有:Stack Overflow和Reddit。

用户体验

使最终用户满意,通常是开发人员的终极目标。因此,对于移动端应用来说,用户的体验往往决定了软件产品的成败。

  • React Native:在响应Android和iOS不断变化的原生元素需求方面,React Native的反应较慢。React Native主要提供的是包括React Virgin和Shoutem在内的,现成的UI工具包,可帮助开发人员创建各种原生的UI组件。其中,诸如:分页、快速轮播、活动标记等内在元素,可以协助开发人员改善横跨不同平台的用户体验。
  • Xamarin:Xamarin允许用户分别为Android和iOS自定义应用元素和组件。同时,它允许开发者使用原生的API和SDK,来进一步增强用户体验。此外,它通过利用原生的UI和硬件加速,来极大地“催化”Xamarin移动应用的开发。

因此,对于希望提供更好的用户体验的开发者而言,Xamarin可能更为可取。

小结

综上所述,Xamarin在许多方面都超过了React Native。不过有趣的是,React Native的使用率仍远高于Xamarin。其根本原因在于:开发人员的编程语言掌握能力上。根据 2018年的统计数据(,世界上有1,070万名JavaScript开发人员,和620万名C#开发人员。

客观地说,到底选择哪种框架,实际上完全取决于,您是要通过简单的UI来构建应用程序,还是要构建具有类似原生的UI,并可以利用平台硬件来增强性能的软件产品。如果您的目标是前者,那么请选择Xamarin;如果是后者,则请考虑React Native。

原文标题:Xamarin vs React Native: Pick the Right Platform in 2021,作者: Himanshu Patel

【51CTO译稿,合作站点转载请注明原文译者和出处为51CTO.com】

 

责任编辑:华轩 来源: 51CTO
相关推荐

2014-01-07 17:08:02

Java开源框架

2023-05-26 15:53:48

MidjourneyAI图像

2009-10-13 14:46:00

思科认证

2010-04-21 12:54:46

Unix内核

2019-08-27 09:00:00

敏捷开发开发方法项目

2010-03-18 14:54:46

主流无线技术

2011-01-19 11:10:30

2009-07-02 18:50:43

2010-09-08 15:41:28

SIP协议栈

2017-09-10 14:29:03

眼力

2010-08-25 16:12:34

职场

2010-05-28 11:09:51

SVN功能

2021-03-15 21:07:17

IT行业薪酬薪水

2011-11-08 10:29:44

2023-11-14 09:00:00

向量数据库ChromaMilvus

2010-08-05 14:25:30

Flex框架

2017-02-05 17:10:41

机器学习深度学习框架

2020-05-18 11:07:53

监控系统架构技术

2010-07-14 13:38:51

Perl开发工具

2020-08-04 17:06:40

Merging Rebasing Git
点赞
收藏

51CTO技术栈公众号