前端技術框架選型,跨端框架盤點

imyung發表於2020-07-25

一年前我們打算做一個跨端產品,希望一套程式碼,同時釋出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的日趨完善,我相信還會越來越好。

相關文章