開源式框架Xamarin與React Native大比拼
譯文【51CTO.com快譯】有統(tǒng)計表明:目前,全球共有52.2億人正在使用著移動設(shè)備,其中有46.6億人會用設(shè)備來訪問各種移動應(yīng)用。顯然,創(chuàng)建新的應(yīng)用程序,已經(jīng)成為了企業(yè)在激烈競爭中的標(biāo)配。
目前,可用于應(yīng)用開發(fā),特別是移動應(yīng)用開發(fā)的技術(shù)與框架,可謂林林總總。其中最常見的當(dāng)屬Xamarin和React Native。它們都支持跨平臺式開發(fā),也都能夠提供“一次性編寫,各處部署(Write once and Deploy anywhere.)”的功能。不過,鑒于它們在市場份額、代碼編譯、SDK環(huán)境等方面的差異性,本文將通過對兩者進(jìn)行比較,以方便您理解其基本原理,并在實(shí)際項(xiàng)目中做出明智的選擇。
什么是React Native?
React Native是基于JavaScript和JSX的開源式框架,由Facebook于2015年創(chuàng)建并啟用。其目的是為iOS和Android構(gòu)建原生的應(yīng)用程序。
其中,JSX代表了XML-Esque標(biāo)記的合并,而且能夠在React Native框架中被使用。React可以將應(yīng)用程序運(yùn)行、并渲染到目標(biāo)設(shè)備的原生平臺上。據(jù)此,各種應(yīng)用程序?qū)⒕哂?,與使用原生應(yīng)用開發(fā)框架(如Java for Android或Objective-C for iOS)所構(gòu)建出的應(yīng)用,同等的性能。同時,React Native移動應(yīng)用開發(fā)還允許開發(fā)者創(chuàng)建特定于某個平臺的組件版本。由于具有單獨(dú)代碼庫,因此這些組件可以在不同平臺上被共享使用。
有統(tǒng)計顯示:截至2020年,全球有42%的開發(fā)人員正在使用React Native來構(gòu)建,能夠在99%的移動設(shè)備上運(yùn)行的應(yīng)用程序。Facebook、Walmart、Bloomberg和instagram等明星企業(yè)都正在使用React Native,來開發(fā)其移動應(yīng)用。
React Native的優(yōu)勢
- 可擴(kuò)展的社區(qū)支持:全球開發(fā)愛好者們在React Native社區(qū)中分享了大量的知識,并提供著熱情的支持。該社區(qū)中的每個人也都可以免費(fèi)訪問,那些可用于移動程序開發(fā)的大量免費(fèi)組件。
- 實(shí)時熱重載:React的實(shí)時重載功能,可以讓框架實(shí)時地編譯和讀取開發(fā)人員做出的更改。也就是說,它會在并不實(shí)際重載的情況下,驗(yàn)證各項(xiàng)變更,并刷新整個應(yīng)用程序。而熱重載則體現(xiàn)在為模擬器提供新的文件時,從一開始就能讀取整個文件,以更新各項(xiàng)變更。在此,它只會更新已更改的組件。
- 代碼可重用性:React Native是減少代碼量的首選。它可以讓開發(fā)人員重用90%的代碼,以構(gòu)建iOS和Android應(yīng)用程序。此外,由于代碼只需少量修改,便可實(shí)現(xiàn)重用,因此React Native也節(jié)省了大量的開發(fā)時間。
- 第三方插件支持:由于React Native不可能在同一個框架中包含所有的組件,所以開發(fā)人員在使用該JavaScript驅(qū)動型框架時,可以利用地圖、雙因素身份驗(yàn)證等第三方功能,來渲染或增強(qiáng)React Native應(yīng)用。
- 提供最佳性能:應(yīng)用程序的性能,以及提供更佳客戶體驗(yàn)的能力,直接取決于構(gòu)建應(yīng)用的框架。由于開發(fā)人員可以利用React Native的原生模塊和組件,來構(gòu)建應(yīng)用,因此他們可以創(chuàng)建互不干擾的原生API和程序代碼。也就是說,他們能夠以較低的代碼量和較快的開發(fā)周期,來創(chuàng)建以性能為中心的應(yīng)用程序。
什么是Xamarin?
由Microsoft創(chuàng)建的Xamarin,目前在開發(fā)社區(qū)中的占有率僅為14%(2019年曾為26%,https://www.statista.com/statistics/869224/worldwide-software-developer-working-hours/)。雖然與React Native相似,但是Xamarin更適合.Net的開源平臺。
Xamarin的主要功能是:維持共享代碼和平臺代碼之間的通信。Xamarin通過使用獨(dú)立于平臺的工具和代碼庫,來擴(kuò)展.Net開發(fā)者平臺的各項(xiàng)功能。同時,Xamarin可以使用底層平臺所提供的全部功能。也就是說,當(dāng)應(yīng)用程序運(yùn)行在Android上時,它會利用特定于平臺的各項(xiàng)功能,來提供預(yù)期的用戶體驗(yàn)。該特性同樣適用于運(yùn)行在iOS設(shè)備上的應(yīng)用程序。此外,Xamarin還能夠用到基礎(chǔ)平臺的硬件加速功能。
Xamarin的優(yōu)勢
- 一種技術(shù)棧:作為具有內(nèi)置多項(xiàng)技術(shù)的生態(tài)系統(tǒng),Xamarin能夠讓開發(fā)人員一次性構(gòu)建多平臺的應(yīng)用程序。例如:使用在.Net框架上運(yùn)行的C#語言,開發(fā)人員可以實(shí)現(xiàn)96%的代碼重用。當(dāng)然,他們也可以用到.Net和Visual Studio。
- 共享代碼:Xamarin旨在通過通用的代碼庫,方便用戶開發(fā)出可以運(yùn)行在不同平臺上的應(yīng)用。同時,應(yīng)用之間可以共享相同的業(yè)務(wù)邏輯、數(shù)據(jù)庫訪問、以及網(wǎng)絡(luò)通信。而開發(fā)人員唯一需要更改的只是用戶界面,以保證應(yīng)用在每個平臺上,都具有原生的觀感。
- 原生性能:與其他跨平臺的開發(fā)工具相比,Xamarin能夠提供高度原生、且無與倫比的應(yīng)用性能。在圖像加載速度方面,Xamarin只比原生應(yīng)用慢14%。
- Xamarin Forms可提供流暢的用戶體驗(yàn):Xamarin.Forms具有100%的可重用代碼API組件和元素庫。開發(fā)人員可以使用內(nèi)置的Xamarin.iOS,來自定義各種元素。當(dāng)然,它在Android平臺上也同樣適用。
- 代碼庫數(shù)量的增加:過去Xamarin沒有廣泛的代碼庫,可供開發(fā)人員使用。如今,Microsoft開發(fā)團(tuán)隊正在持續(xù)構(gòu)建各種常見的用例和組件。例如:Xamarin能夠提供雙因素認(rèn)證(2FA)之類,可以被直接插入使用的代碼庫。
開發(fā)人員該如何選擇?
通過上述介紹,我們不能發(fā)現(xiàn),雖然兩者有著相似的功能,但是React Native比Xamarin具有更大的開發(fā)人員基礎(chǔ)。下面,我們從各項(xiàng)原始特性出發(fā),幫您梳理出它們各自不同的適用場景。
編譯
它們的跨平臺開發(fā)功能--Just-in-time(JIT),能夠使開發(fā)人員在運(yùn)行時(runtime)中,編譯字節(jié)碼或源代碼。不過,在Android允許JIT之處,iOS不允許JIT限制任何形式的跨平臺應(yīng)用開發(fā)框架。
- React Native:由于JIT在iOS上是不允許的,因此源代碼中的任何更改,都會要求開發(fā)人員退回到Android代碼處進(jìn)行更改。它們只有在完成之后,方可作為iOS應(yīng)用被運(yùn)行。
- Xamarin:為了繞過此問題,Xamarin針對代碼的編譯,計算了提前時間(Ahead-of-time,AOT)。AOT編譯器的任務(wù)是,分析字節(jié)碼,并用機(jī)器語言對其進(jìn)行編譯,然后對所選擇的路徑執(zhí)行相同的操作。這樣雖然可以減少啟動時間,提高應(yīng)用程序的性能,但是也增加了文件的大小。同時,由于Xamarin在默認(rèn)情況下已啟用了JIT,因此您可以先配置AOT,再使用它。
性能
無論是原生的,還是由Xamarin開發(fā)的移動應(yīng)用,都需要通過出色的性能,給用戶留下良好的印象,并與之進(jìn)行流暢的互動。
- React Native:React Native中的Native Thread、JavaScript Thread、以及連接它們的中介網(wǎng)橋(mediator bridge),都能起到性能提升的作用。其中Native Thread通過網(wǎng)橋向JavaScript Thread發(fā)送信號。不過,由于JavaScript Thread可以處理的消息數(shù)量有限,因此在消息數(shù)增多時,應(yīng)用程序的UI會出現(xiàn)滯后。我們可以通過使用為此目的構(gòu)建的特定第三方庫(例如Proguard),以更快的速度優(yōu)化字節(jié)碼。
- Xamarin:雖然Xamarin.Forms的性能指標(biāo)不及原生框架,但是作為彌補(bǔ),Xamarin能夠以較低的成本和更少的時間,來完成諸如處理API請求、序列化、反序列化、圖像保存、以及加載等簡單的開發(fā)任務(wù)。此外,由于Xamarin.Forms包含了Xamarin.Android和Xamarin.iOS,因此它們都能夠讓開發(fā)者自定義共享代碼庫,進(jìn)而為用戶提供原生的觀感和體驗(yàn)??梢哉f,在某些操作中,Xamarin.Android甚至能夠表現(xiàn)出比原生框架更好的性能。總的說來,Xamarin不但能夠提高性能,還能夠匹配原生框架的各項(xiàng)指標(biāo)。
應(yīng)用架構(gòu)
應(yīng)用架構(gòu)是指那些能夠構(gòu)建出合理的編程模式與結(jié)構(gòu)的開發(fā)框架??梢哉f,更強(qiáng)大、更快捷、更穩(wěn)定的基礎(chǔ)架構(gòu),往往可以讓開發(fā)人員以最小的代價,來解決各類復(fù)雜的開發(fā)問題。
- React Native:React Native體系架構(gòu)由React、JavaScript(JSC)、Bridge和Native Side四個關(guān)鍵組件組成。那些習(xí)慣了使用單向數(shù)據(jù)流,和最新版JavaScript的開發(fā)人員,可以輕松地使用它。對于iOS React Native移動應(yīng)用的開發(fā)而言,JavaScript Core為運(yùn)行時(runtime)分離了所有的代碼;而對于Android來說,則需要將它們捆綁到應(yīng)用程序的內(nèi)部。雖然將代碼捆綁在一起,的確可以帶來更好的原生性能,但是此舉的代價是性能問題,隨著應(yīng)用本身體積的增大,滯后很可能會逐漸產(chǎn)生。
- Xamarin:Xamarin支持不同的架構(gòu)模式,其中包括:MVVM(模型、視圖、視圖和模型),MVC(模型、視圖和控制器)、業(yè)務(wù)外觀、單例(Singleton)、異步等。Xamarin對于那些習(xí)慣了使用ASP.NET、MVC、Web Forms、以及其他相關(guān)模型與視圖工具的開發(fā)人員而言,非常容易上手。同時,Xamarin MVP非常適合那些由該框架構(gòu)建的原生應(yīng)用。當(dāng)然,為了充分利用Xamarin,開發(fā)人員也可以采用MVVM模式。
可見,這兩種框架在應(yīng)用體系架構(gòu)方面,表現(xiàn)得同樣出色。
社區(qū)支持與協(xié)助
社區(qū)支持對于初學(xué)者與資深開發(fā)人員之間的問答、共享、以及相互學(xué)習(xí),都是至關(guān)重要的。
- React Native:雖說React Native是一個較新的框架,但是Facebook為其打造了龐大且可擴(kuò)展的社區(qū)支持。目前,該社區(qū)擁有2200多個專業(yè)的開發(fā)人員和19800個實(shí)時項(xiàng)目。同時,它擁有專用的Discord頻道和論壇,可幫助開發(fā)人員每天了解到該框架的最新信息。
- Xamarin:Xamarin在開發(fā)社區(qū)方面根基較深。它在120個國家/地區(qū)擁有約140萬名開發(fā)人員。與React Native類似,它也是一個開源的網(wǎng)絡(luò),因此各類貢獻(xiàn)者可以通過協(xié)同努力,來彼此學(xué)習(xí)和成長。不過,與React Native的開放式社區(qū)不同,Xamarin提供了Xamarin Blog和Xamarin Q&A兩種官方渠道。當(dāng)然,其他類型的社區(qū)支持還有:Stack Overflow和Reddit。
用戶體驗(yàn)
使最終用戶滿意,通常是開發(fā)人員的終極目標(biāo)。因此,對于移動端應(yīng)用來說,用戶的體驗(yàn)往往決定了軟件產(chǎn)品的成敗。
- React Native:在響應(yīng)Android和iOS不斷變化的原生元素需求方面,React Native的反應(yīng)較慢。React Native主要提供的是包括React Virgin和Shoutem在內(nèi)的,現(xiàn)成的UI工具包,可幫助開發(fā)人員創(chuàng)建各種原生的UI組件。其中,諸如:分頁、快速輪播、活動標(biāo)記等內(nèi)在元素,可以協(xié)助開發(fā)人員改善橫跨不同平臺的用戶體驗(yàn)。
- Xamarin:Xamarin允許用戶分別為Android和iOS自定義應(yīng)用元素和組件。同時,它允許開發(fā)者使用原生的API和SDK,來進(jìn)一步增強(qiáng)用戶體驗(yàn)。此外,它通過利用原生的UI和硬件加速,來極大地“催化”Xamarin移動應(yīng)用的開發(fā)。
因此,對于希望提供更好的用戶體驗(yàn)的開發(fā)者而言,Xamarin可能更為可取。
小結(jié)
綜上所述,Xamarin在許多方面都超過了React Native。不過有趣的是,React Native的使用率仍遠(yuǎn)高于Xamarin。其根本原因在于:開發(fā)人員的編程語言掌握能力上。根據(jù) 2018年的統(tǒng)計數(shù)據(jù)(,世界上有1,070萬名JavaScript開發(fā)人員,和620萬名C#開發(fā)人員。
客觀地說,到底選擇哪種框架,實(shí)際上完全取決于,您是要通過簡單的UI來構(gòu)建應(yīng)用程序,還是要構(gòu)建具有類似原生的UI,并可以利用平臺硬件來增強(qiáng)性能的軟件產(chǎn)品。如果您的目標(biāo)是前者,那么請選擇Xamarin;如果是后者,則請考慮React Native。
原文標(biāo)題:Xamarin vs React Native: Pick the Right Platform in 2021,作者: Himanshu Patel
【51CTO譯稿,合作站點(diǎn)轉(zhuǎn)載請注明原文譯者和出處為51CTO.com】