天天看點

flutter在2019年會有怎樣的表現?Flutter的趨勢跨平台解決方案比較Flutter的生态Flutter今年幾個重要的突破點Flutter面向未來

作者:閑魚技術-吉豐

Flutter的趨勢

  • 在移動端,受成本和效率的驅使,跨平台一站式開發慢慢成為一個趨勢。從Hybird,RN,WEEX,Flutter,到各種小程式或快應用的大量湧現,雖然很多跨平台方案都有各自的優缺點,目前還沒有完美無缺的終極方案,但這已是未來移動端開發不可逆轉的一大方向。而Google推出并開源的移動應用開發架構Flutter,更是其中的明星。
  • 筆者從自身在做Flutter相關的分享中,特别強烈的感受是,有非常非常多的Native技術棧的同學在學習和使用Flutter,有非常多的前端技術棧的同學在時刻關注Flutter的hummingbird和desktop-embedding的進展。尤其自Flutter1.0 釋出後,Flutter受到了業界更多的關注和期待。

跨平台解決方案比較

  • 目前幾個主流的跨平台解決方案:
  1. 基于浏覽器技術的Hybird
  2. 基于橋接Native元件,如RN、WEEX
  3. 基于底層統一渲染,如Flutter
  • 它們有各種的優缺點,但浏覽器技術無疑是其中的曆史最長、标準最完善、使用者最多、生态最豐富的。RN、WEEX也可以歸類為javascript生态的一個小分支。

    而Flutter走的是和前兩者截然不同的路線,它是一個新興的挑戰者,通過底層統一渲染,得到高度一緻的跨端效果;通過引入dart,得到AOT的接近原生的性能,和JIT的快速開發體驗;通過上層完善的元件體系(material design & cupertino),得到高保真的UI體驗。但它也并非盡善盡美。同時基于底層統一渲染的跨平台方案有很多,在移動端有實際應用的如QT、cocos2d等。

  • 對比Flutter和QT,最大的差別在語言和背後團隊。
  • 語言:Flutter選擇了Dart,QT是C++。Dart相比C++,對開發者來說無疑于相比騎自行車和開飛機的差別,Dart更容易編寫,除此以外,Dart還擁有AOT和JIT兩種模式、類型安全、快速記憶體配置設定等等特點,确實如Flutter團隊所述,同時擁有一兩條這些優點的語言不少,但是将所有這些優點集于一身的,隻有Dart。
  • 背後團隊:Flutter的背後是Google,QT的背後是TrollTech,從社群影響力和号召力而言不可同日而語。
  • 但同時也必須要認識到的是通過底層統一渲染的跨平台方案,也有它天然的劣勢。它很難複用系統天然提供的元件。在擺脫對作業系統的依賴和複用作業系統的能力上,要考慮如何達到了一個最佳的平衡。

Flutter的生态

如果拿Flutter生态同React和Native進行比較的話

  • 基于核心UI表達層向上,這一層會更接近前端的體系,以React生态為參照物,主要的幾部分
    • 路由體系
      • 一種面向以Flutter為主的應用,它的路由以Flutter為主,Native的路由部分往往以簡易橋接的形态存在。
      • 一種面向混合技術棧為主的應用,它的路由以Native為主,Flutter為輔。
    • 狀态管理體系 | 應用架構
      • 基本上在React生态下有的狀态管理,Flutter也有,同時有一些是Flutter獨有的。
      • 開源的代表有:flutter_redux, google的BLoc,scoped_model,及閑魚的fish-redux,它在真實的複雜場景下得到了非常好的驗證。
    • UI庫體系
      • 目前已有不少UI庫,包含常見的元件。
  • 基于核心UI表達層向下,這一層會更接近Native的體系,以Native生态為參照物,主要的幾部分
    • 核心的一些基礎中間件,如網絡,圖檔,音視訊,存儲,埋點,監控等。
      • 目前和Native相比還是有非常大的差距。是以也導緻了目前大部分這些問題的解決方案,都趨向于橋接的形态。通過複用Native能力來短期補齊Flutter能力不足的。但它不一定是未來的最佳的方案。
    • 一些重量級的基礎元件,如WebView,MapView等。
      • 目前已經能通過PlatformView的形式,得到能力拓展。但是它有使用的局限性和性能上的損失。

Flutter今年幾個重要的突破點

  • Code-Push
    • 在當下國内應用生态環境,熱修複或者熱部署能力在很多公司和團隊做技術選型中,往往是其中非常重要的一個選項。如果有Google官方推出,不管是hotfix,還是dynamic-boundle都将極大的推動Flutter在國内的發展。
    • 而基于dart語言的特性判斷,在Flutter上做code-push理論上會比目前任何Native的code-push方案有更強的能力。閑魚團隊一直和Flutter團隊就這友善保持緊密的聯系,在之前的驗證中,目前在android端是可以支援的,但還留有一些瑕疵。
  • Humming-Bird
    • 在跨平台之外,還有一層更進階别的訴求,多應用投放,打破應用之間的孤島壁壘,實作更多的商業價值。而要完成多應用的投放,首選的是基于浏覽器的方案。Humming-Bird方案為這樣的設想,提供了可能。
    • 同時Humming-Bird也将大大擴張了Flutter的邊界,吸引更多的開發者和廠商的加入,同時讓面向終端的全棧解決方案成為可能。Dart語言也有可能成為javascript生态的更好的補充和演進。

Flutter面向未來

     基礎架構設計決定了一個軟體的發展上限,它帶來了更多的想象力。使用Flutter和Dart,既是Google為擺脫和Oracle糾纏多年的“Java 侵權案”提前下的一顆棋,也是Google為下一代作業系統Fusion下的一顆棋,是即Google通過chromium項目漸進的統一浏覽器領域,着眼于更多的終端,為了一個更大終端生态的大一統做準備。這讓Flutter和Dart充滿了更高層次的可能。如果沒有這些可能,Flutter的生命無疑是會短暫的,因為它還未能建立被廣泛被認可的标準,就像我們終端裡走過的那麼多的技術一樣,都是有限的解決了當下的訴求,但随着終端的更替,作業系統的演進,慢慢變成了明日黃花。而正是這些更多的可能,是Flutter持續演進的源泉,是Flutter相比其他的跨平台方案中最吸引人的部分。