實現(xiàn)機制對比
React Native依賴web技術(shù),具有前端親和力,融合HTML標簽思想,虛擬DOM的機制映射成原生的View.利用原生語言(Objective-C,JAVA)與JS橋接通信,實現(xiàn)一套跨平臺UI開發(fā)框架,開發(fā)層面是前端思想,實質(zhì)還是完全依賴iOS,安卓原生的view進行渲染.
Flutter則是十分極客精神的作品,自己實現(xiàn)渲染引擎,脫離iOS,安卓原生的view的束縛,并且重新使用一門語言,集成自己的腳本解析引擎跟原生語言(Objective-C,JAVA)通信.
開發(fā)方式,難易程度對比
React Native具備天然的web親和力,并且基于react.js的開發(fā)思想,使得前端的人也可以通過短時間的學(xué)習(xí)迅速上手.
Flutter使用了一個新的Dart語言進行開發(fā),就使得開發(fā)者需要重新學(xué)習(xí)這門語言,但好的是Dart語言簡潔有力,上手也不會太難.
社區(qū)生態(tài)
論成熟度,React Native是2015年出來的,在當(dāng)時具備劃時代的新穎開發(fā)思想,受到全球移動開發(fā)者的關(guān)注,參與使用者眾多且熱情,有了很多擴展組件,滿足大部分移動應(yīng)用開發(fā)需求.
而且由于有了大量受眾就有了一個歷練場,遇到的開發(fā)問題也能即使受到官方的重視.比如2017蘋果禁止熱更新的策略,在有可能波及到React Native的情況下, Facebook工程師及時的改進了React Native熱加載iOS原生模塊使用的插入特殊section段進行識別機制,以防止蘋果審核判定有熱更嫌疑.
另還有2018年上半年Airbnb發(fā)表一系列文章,在使用React Native中遇到的很多問題,宣布放棄使用,在這樣的狀況下,React Native團隊也是進行了反思,計劃進行底層的一些重構(gòu).這是一個框架朝著良性發(fā)展的好的態(tài)勢.在熱度中成長,在批評中不斷完善.
Flutter是2018年出來并受到關(guān)注的.因為它極客的設(shè)計,以及號稱吸取了React Native的一些缺點經(jīng)驗,尤其是性能方面進行了改良,這些亮點使得大眾以驚嘆與敬畏的心情對它產(chǎn)生了興趣.是個有力的新生兒,這就說明了它目前的社區(qū)生態(tài)還處于發(fā)展階段,一些第三方的擴展組件需要時間,需要熱情的開發(fā)者來慢慢填充,完善.
并且目前Flutter 還處于 beta階段,issue比較多.
國內(nèi)探索進程
React Native:
京東團隊比較早的進行了探索研究,組織團隊研究源碼,進行庫的瘦身,加載性能優(yōu)化,拆分打包等等,并應(yīng)用于京東APP.
攜程團隊,由于展示型業(yè)務(wù)中心的產(chǎn)品,也是很積極地投身入React Native的使用探索.并且積極地對外發(fā)表團隊的研究成果以及使用心得,具有很大的參考意義.
Flutter:
阿里巴巴閑魚團隊最早進行了嘗鮮踩坑,并有一幫極客的工程師熱情的對Flutter的底層做一些深入研究.也只在閑魚的商品詳情頁面使用了Flutter開發(fā).
美團也比較積極的進行了一些探索,也是比較謹慎的先進行比較深入的底層研究,對外也比較積極的發(fā)表文章共享一些研究成果.
第三方庫,UI組件量
Flutter 目前有1000+ library掸绞。
ReactNatve 專用library有11000+ (以react-native名稱開頭的包)杠袱,與web開發(fā)可以共用的包700000+
包體大小
App體積
Flutter iOS空項目 30M左右撤奸,Android空項目 7M左右婚苹。 (iOS需要額外集成Skia)
React Native iOS空項目 3M左右,Android20M左右法牲。(Android會加入OKHttp導(dǎo)致體積增大)
跨平臺兼容問題
Flutter是谷歌出的.因此Android上適配要比iOS好一些,RN在 Android 上有可能遇到兼容性問題,但不是大問題,有解決方案.
React Native在iOS上面兼容性好一些, iOS的控件直接取自原生的控件.
總結(jié)
React Native足夠成熟,Flutter是有力的新生力量.
React Native滿足正常的一些展示型的app開發(fā)需求游刃有余.
Flutter滿足新鮮與極客技術(shù)的追求前提下,可以嘗試,但要及時關(guān)注業(yè)界對它的探索.
個人
曾對React Native實現(xiàn)機制有過研究積累,以及RN工程構(gòu)建源碼進行過探索,對原生模塊類映射到j(luò)s層的橋接源碼進行過研究.因此使用React Native進行開發(fā),就可以利用之前的經(jīng)驗,解決開發(fā)中的問題.