一年前我們打算做一個跨端產品,希望一套程式碼,同時釋出Android/IOS/Windows/Mac/Web五端,以減少開發成本及測試成本和維護成本,基於此,對市面上一些技術棧進行對比研究。
首先確定幾個選型的標準:
- 最好具有跨平臺能力,能夠一套程式碼支援多端釋出
- 效能較高,各端均有很好的流暢度
- 相容性較好,各端不會有較大差異,從而導致各端陷阱
- 開發效率越高越好
- 比較成熟,有完善工具鏈,社群
目前比較符合條件有以下5種方式:
原生開發
- 使用語言:Kotlin/Java/Swift/OC
- 優勢:
- 官方原生支援,功能強大健全,效能和體驗是最好的
- 元件豐富,社群強大
- 劣勢:
- Android和IOS需要分別開發,開發人力、測試人力翻倍,bug數量翻倍
- 容易出現ios和Android表現不一致的情況
- 社群:官方社群,比較活躍
總結:不能多端開發,開發,測試,維護成本都偏高,直接淘汰
React
- 使用語言:js/原生擴充套件
- 優勢:
- 可以基於js開發,方便複用前端開發人員及部分web程式碼
- web相容性和效能都較好,開發人員比較好找
- react作為響應式框架,程式碼結構清晰,開發效率較高
- 可以使用ReactNative實現跨平臺
- 劣勢:
- 使用js作為語言,效能不及原生,js和原生通訊互動,進一步損失效能
- 由於UI表現使用原生模擬web/css,有一定的侷限性和相容性,從而在實現真正跨平臺時,會經常碰到相容性及功能侷限性
- 社群:Facebook維護,社群較為活躍
總結:React是企業用的最多,各方面都比較成熟的方案,是可以備選的方案,但效能和相容性上未能到達極致體驗,需要積累避坑經驗
Weex
- 使用語言:js/vue/原生擴充套件
- 優勢:
- 同react,可以結合vue框架書寫
- 對於熟悉vue的同學能較快入門
- 劣勢:
- 同react,最初由阿里巴巴開發,後來轉交給Apache基金會
- 測試bug較多,後續缺乏維護動力
- 社群:Apache基金會
總結:相比ReactNative,Weex穩定度和社群較差,淘汰
UniApp
- 使用語言:js+vue+微信小程式元件
- 優勢:
- 使用js+vue,能讓前端無需學習,就能快速開發
- 一套程式碼,能同時支援APP/H5/小程式,是較為全面的跨平臺框架
- 兼任小程式,能同時釋出到多個小程式平臺
- 劣勢:
- 使用js+小程式多程式架構,在ui和邏輯通訊過程中,效能大打折扣,對實現複雜介面及極致效果時會有點力不從心
- App實現部分不開源(最新部分開源),遇到問題只能等官方解決
- 相容性較差,大部分時間不是在開發,而是在優化效能及除錯各端相容性問題
- 社群:DCloud
總結:UniApp一開始是我比較看好的技術,結合小程式+vue技術棧,很有潛力,但測試一段時間發現幾個問題:1.部分開源(不開源部分就沒法優化),2.效能有瓶頸,對於想做極致體驗的App,有一個明顯的天花板,3.多端相容性較差,經常在web端正常,在移動端就莫名其妙的不正確,會浪費很多時間在除錯相容性上,最終放棄
Flutter
- 使用語言:dart/第三方擴充套件
- 優勢:
- google出品,目前可以同時跨Android/IOS/Web/Windows/Mac
- desktop版本在開發中(計劃2020年釋出),同時也是google下一代作業系統Fuchsia的官方UI方案
- flutter框架效能優異,相容性小,類似react的元件化響應式開發框架,開發效率較高
- 官方提供移動端大量第三方元件,能極快的提高UI組裝效率,關鍵還開源,哪裡不好改哪裡,開發不怕遇到天花板
- 工具鏈強大,熱更新秒看結果,極大的提高開發效率
- dart強型別語言,相對js在程式碼提示,程式碼重構上有較大方便性,在開發過程中就能避免很多bug產生
- 劣勢:
- UI組織方式比較另類(程式碼巢狀方式,習慣了就好)
- 不支援小程式,web實現不是最優方案,在記憶體和效能上會比傳統開發有較多消耗
- 外掛還需完善,第三方外掛很難做到跨所有平臺(大部分可以跨移動端)
- 社群:google pub.dev第三方社群,比較活躍
總結:Flutter作為一個新興的技術棧,有著巨大的潛力,以google的技術背景支援下,工具鏈,社群都比較完善,Flutter打破了React依賴原生的缺點,直接自己接管渲染層,在各端有較好的相容性,同時使用dart語言,相比js有較好的開發體驗,組織程式碼更容易,再加上熱更新,開發效率直接翻倍
最終我們選擇Flutter作為技術棧,現在回顧一下,依然覺得Flutter是最好的跨平臺框架,使用的時候真是各種爽,無論開發效率,效能,跨平臺上,都有非常不錯表現,隨著Flutter的日趨完善,我相信還會越來越好。