談移動應用的跨平台開發不能不提HTML5,PhoneGap和Sencha等平台一直致力於使用HTML5技術來開發跨平台的移動應用,現在看來這個方向基本算是失敗的,基於HTML5的移動應用在用戶體驗上與原生應用仍然存在着明顯的差距。
與上述HTML5平台不同,Xamarin和React Native通過各自的方式來實現跨平台。Xamarin基於Mono框架將C#代碼編譯為原生平台代碼,React Native則是在UI主線程之外運行一個JavaScript線程,兩者呈現給用戶的都是原生體驗。
筆者恰巧兩個平台都各使用過一段時間,在這里就拋磚引玉,分享一下個人觀點。對於資源有限的創業團隊,如果熟悉JavaScript,使用React Native再加上React,Redux等技術可以實現移動端、Web端、和Service端整套系統的開發,還可以重用一部分代碼(比如Reducer和Action中的業務邏輯,以及通用的JavaScript組件代碼),React Native也非常適合快速原型的開發。對於實力相對雄厚的大中型公司,如果已經在使用Microsoft的.Net技術,並且擁有成體系的系統架構,那么Xamarin或許是一個更好的選擇,架構設計得好的話在代碼重用方面並不遜於React Native。
下面從幾個方面說一說兩者各自的優缺點:
-
從編程語言的角度來說,C#和JavaScript都是成熟的主流編程語言,都有豐富的第三方庫和強大的社區支持。兩種語言都能夠實現從前端一直到后端的整套方案。
-
從開發工具的角度來說,Xamarin Studio的表現只能說剛剛及格,有種和Xamarin整個產品線不在一個水平的感覺,特別是重構和界面可視化編輯等方面還有很大的改善空間,並且在版本升級中經常會引入新的BUG,讓筆者多少有點患上了升級恐懼症。React Native本身沒有IDE,開發人員可以選擇自己熟悉的JavaScript IDE,比如:IntelliJ等。
-
從第三方庫的角度來說,Xamarin的第三方庫給人一種不多不少、剛好夠用的感覺。在IDE中集成了Xamarin Component Store以后,第三方庫的數量質量都有了提升,開發人員使用起來也非常方便。如果遇到特殊情況需要自己開發或者綁定(binding)原生代碼庫時可能會比較麻煩一些。React Native則完全依賴於JavaScript社區,NPM和GitHub,在需要自行開發和橋接(bridging)原生代碼庫時個人覺得比Xamarin容易一些。
-
價格方面,Xamarin有免費版本,但在應用包尺寸上有限制。對於企業級開發最好還是選擇它的Enterprise License,雖然價格不菲,但是可以獲得技術支持和使用平台的其他產品(如:Xamarin.Forms和Xamarin Test Cloud)。React Native則是完全免費的。
-
至於學習難度,很多人對JavaScript缺乏信心,覺得這門語言很難掌握和用好,而C#和Java則相對容易安全得多。這里筆者推薦圖靈的《你不知道的JavaScript》系列,看過之后也許能夠改變這一看法。除了JavaScript語言,React Native還需要掌握Facebook的React框架,它是React Native的核心。Xamarin要求掌握C#以及iOS和Android開發的相關知識,雖然使用React Native並不一定要求會iOS和Android開發,但是對於移動應用開發者來說,無論使用什么工具、怎樣跨平台,了解各個平台的架構設計還是非常必要的。
下面是對兩者各方面的一個總結:
不足和紕漏之處還望各位不吝賜教,歡迎交流討論。