能熟練使用vue

以前用過weex,能直接上手,比較傾向。但是這不是個有說服力的理由。而且好像已經不維護了。

flutter看著和java有點像。有點java基礎。感覺可以嘗試。

rn:挺火的。但是facebook好像自己都不用了。

怎麼選吶?

我都可以學可以用。都火,也都有坑。怎麼選吶?

怎麼說出有個說服力的理由?專業的理由?


每種解決方案都有他的應用場景,關鍵看你要幹什麼事情,如果單純學習而不是滿足業務,那麼優先 flutter 好了


我之前寫過一篇文章,講解我編程多年使用過的那些跨平台技術,你說的這幾個還是最近幾年的跨平台技術。從早期的Cordova到現在的Flutter,從SmartTV到Android、iOS、MacOS以及Windows(還有死去的Windows Phone,我可愛的Lumia 720隻能變成老年機了)。從事編程那些年經歷的跨平台開發工具框架包括:Cordova,Xamarin,Titanium,NativeScript,React Native,Electron,uni-app,Flutter,我做了一個詳細的來龍去脈的分析以及優缺點對比,花了一個通宵整理的。

我在這裡只挑選部分做一個說明:

React Native(底層使用React)

小弟算是第一批把React Native用在生產環境上的人(當時是0.0.3版,第一個public版,想想我當時膽子還真大)。

ReactNative沒有像NativeScript一樣做反射,而是建構了一組RCTBridge,用來做js跟native之間的交互,要使用native API或native 組件的話都要在native層做橋接,然後導入到js裡面(類似你寫Node的C++ addon的感覺)。

優點:

  • 1.ReactNative能有今天的反響,很大一部分是得利於React生態圈的整體發展優勢,以及有Facebook已經在他們的app上做過產品實踐,這對很多人而言是一劑強心針,再加上諸如Airbnb,Uber等大型公司也紛紛採用,更造成了推波助瀾的效果。
  • 2.打出來的包會比NativeScript的小,架構實現上也比較單純。因為ReactNative沒有像NativeScript一樣做反射,而是建構了一組RCTBridge,用來做js跟native之間的交互,所以打出來的包會比NativeScript的小,架構實現上也比較單純。
  • 3.ReactNative當初出現時打的口號是「learn once, write everywhere」,讓不同平台上保有不同的平台特性。這個中心思想所帶來的架構設計,讓ReactNative可以很輕易的擴展到其他平台上,例如第三方開發者實現的react-native-macos、react-native-appletv(後來被整合進官方里)、微軟官方開發的react-native-windows(原名是uwp)、Samsung官方的react-native-tizen,幾乎可以說所有平台上都可以看到ReactNative的影子,具體是否成熟有待研究。

缺點:

  • 1.ReactNative目前其實還不算是在一個穩定的狀態,他們每兩周都會更新一次,這也是開發時要注意的一點。
  • 2.你必須擁有native platform相關的知識。應該說,自從Cordova之後的主流跨平台方案都會要求要具備一定程度的平台原生相關知識。雖然說比起NativeScript,ReactNative在沒有任何的原生知識的情況下也是可以編譯打包生成一個可用的app,但是這會大大的限縮了你的可擴展性,而且在不了解原生的渲染以及運作方式的情況下,可能會不小心讓CPU發燙成了定時炸彈。
  • 3.每個native module都要自己橋接一次,非常麻煩。
  • 4.性能差,卡頓嚴重,遠比不上native應用性能。

Weex(底層使用Vue)

weex資料太少了,我就不做介紹了,反正我是踩過坑的,後來放棄weex了,文檔不齊全,API缺少,擴展功能不完善,性能也好不到哪裡。。。


Flutter

Flutter是谷歌推出的一個全新的高性能高一致性的跨平台的開發框架。

【優點:】

  • 1.你只需要使用Dart語言寫一套代碼,即可自動編譯到各個平台,目前支持Android,iOS,Web(Beta),Desktop(Alpha),當然也有Windows PC和linux平台的兼容支持官方正在研發中。所以你完全不用擔心框架內部是如何幫你實現的。你只需要一個命令行就可以在對應平台運行你的代碼了,比如:flutter run xxx,這裡的xxx指的是你的平台設備名稱,比如「flutter run chrome"表示將程序運行在瀏覽器上面。
  • 2.獨立的Skia渲染引擎,高性能高一致性。你的代碼編譯出來的程序可以達到60bps的高性能。
  • 3.豐富的組件支持,你完全可以按照你的想法去做,擴展性非常強大,MD風格的,以及ios風格的組件都有,足夠滿足平時開發需求。而且Flutter基於react以及flex的思想進行布局。
  • 4.豐富的社區支持。目前常用的組件以及一些第三方包都有大佬開源出來了,足夠應對平時的開發了。如果你不清楚的話,也沒關係,我特意收集了Flutter工具集合,這裡面啥都有,足夠讓你可以快速找到你要的東西,你可以點進來看看:AweiLoveAndroid/Flutter-learning
  • 5.開源免費的。你可以隨意修改內核引擎代碼,以及組件代碼,定製化的開發,比如閑魚,騰訊,位元組跳動等大廠都基於Flutter進行針對他們的App開發做了定製化的整合方案,當然你要是感興趣的話,你也可以這麼做。
  • 6.使用Dart語言進行開發。Dart語法很像JS+Java+Swift+Kotlin+C#+TypeScript+JavaScript+PHP,雖然表面上沒有使用web開發,但是你完全不用擔心,你仍然可以進行開發,只是語言寫法不一樣,但是這裡面很多都是熟悉的東西,基本上上手成本也是很低的。

【缺點:】

如果不熟悉原生開發,第三方包滿足不了你的需求的時候,那麼就需要你自己去寫或修改已有的插件,這個需要學習一點原生開發的知識(其實這也是很多跨平台技術必不可少的步驟),當然如果你們公司有android或ios的程序員,可以讓他們協助寫一個插件,這對於他們來說都是小問題。

詳情可以看我寫的文章:

AWeiLoveAndroid:從事編程那些年經歷的跨平台開發工具框架演變歷史?

zhuanlan.zhihu.com圖標

RN、Weex採用的技術方案大體相同,它們都使用JavaScript作為編程語言,然後通過中間層轉換為原生的組件後再利用Native渲染引擎執行渲染操作。而Flutter直接使用skia來渲染視圖,而Flutter Widget則使用現代響應式框架來構建,和平台沒有直接的關係。就目前跨平台技術來看,JavaScript在跨平台開發中可謂佔據半壁江山,大有「一統天下」的趨勢。

從性能方面來說,Flutter的性能理論上是最好的,RN和Weex次之,並且都好於傳統的WebView方案。但從目前的實際應用來看卻並沒有太大的差距,特別是和0.5.0版本以上的RN對比性能體驗上差異並不明顯。

總的來說,Flutter最好,RN次之,但是還有很多老項目在用,再說一句,這幾個技術我都寫了書,可以京東去找,希望對你有所幫助


對比過好些個跨平台,得出結論:

便利和性能總是不可協調

便利的如weex和rn,思路差不多,js框架不同,且weex技術支持遠比不上rn

(更便利的uniapp,內置weex,好像什麼都能打,但性能犧牲更大)

性能好的如Flutter,語言和引擎都是自己搞的,性能吹得很牛逼,但寫起來一層套一層,還對布局規則作出很多限制,適合特定使用場景

(性能怎麼都比不上原生Native)

後面又找,發現一個跨平台框架排名網站:

https://www.cyanhall.com/cn/top/cross-platform-framework/?

www.cyanhall.com

找到了排第六的Quasar Framework,github介紹如下:

Build high-performance VueJS user interfaces in record time: responsive Single Page Apps, SSR Apps, PWAs, Browser extensions, Hybrid Mobile Apps and Electron Apps. If you want, all using the same codebase!

翻譯:在紀錄時間內構建高性能的VueJS用戶界面:響應式單頁應用,服務端渲染應用,谷歌小程序,瀏覽器插件,混合移動端應用,桌面級應用

總結:框架採用Vue,集成了Cordova(安卓和ios開發)、inoic Capacitor(更現代的Cordova替代方案)和Electron(電腦桌面端開發),提供Material風格的UI

比起學習成本更高的RN和Flutter,這個性價比對答主來說是不錯的

另外總結了一份跨平台方案的思維導圖:(更多前端導圖總結,公號後台回「前端思維導圖」,會保持更新,by 【鏈接船】)


公司用RN,自己用flutter,準備學swift


我理解這個問題應該是:學哪個又更好的職業發展機會。

我的答案是:不要糾結,技術是為業務服務的,不要拘泥於技術站隊。業務總是要求交付效率提升,跨端技術是必走之路。人才市場的需求是一直存在並且旺盛的。了解一種,或是多種跨端技術只是個人競爭力的多少的問題

  • 熟悉 Web 技術的同學可以從 weex 和 RN 入門,逐步了解移動端原生開發技術,學習曲線平滑。
  • 熟悉 Mobile 技術的同學可以從 Flutter 入門。

我是先學習的 RN,之後學習了 Flutter。推薦一下我的 Flutter 學習經歷整理:

弗蘭克:兩天時間,用 Flutter 寫出一個股票分析客戶端?

zhuanlan.zhihu.com圖標

我用過rn開發過實際項目。

簡單入門過flutter,感覺也還行。

但如果你之前是前端,感覺還是rn好點,雖然各種人吐槽,但是常規業務來說,rn的開發速度,真的不要太快。


專業iOS 開發,目前從原生轉到Flutter開發,公司項目


推薦閱讀:
相关文章