Flutter和RN對比

前言

本人目前負責的項目是原生+Webview方式開發的,由於Webview的體驗不太友好,所以決定選擇一種混編的方式,選擇一種跨平臺的技術來提升改善Webview的體驗,通過各種權衡考慮使用了RN,雖然目前RN在重構,但是沒有人可以否認目前RN的霸主地位,我相信它會越來越好的,本章節就不說RN了,接下來說說Google的Flutter。

Flutter Demo項目地址 : Flutter-App

Flutter

  • Flutter是谷歌的移動UI框架,可以快速在iOS和Android上構建高質量的原生用戶界面。 Flutter可以與現有的代碼一起工作。在全世界,Flutter正在被越來越多的開發者和組織使用,並且Flutter是完全免費、開源的。

  • Flutter 是由 Google 的工程師團隊打造的,用於創建高性能、跨平臺的移動應用的框架。
    Flutter 針對當下以及未來的移動設備進行優化,專注於 Android and iOS 低延遲的輸入和高幀率
    Flutter的設計跟react-native很像,但是比RN進了一步
    Flutter的開發語言是Dart

移動端跨平臺開發技術演進

現在主流的移動開發平臺是Android和iOS,之前還有過windows phone。從最開始的Hybrid混合開發技術,到RN的橋接技術,到現在新興的Flutter技術,跨平臺開發技術一直在演進。

跨平臺開發第一個考慮的就是性能問題

  • RN的效率由於是將View編譯成了原生View,所以效率上要比基於Cordova的HTML5高很多,但是它也有效率問題,RN的渲染機制是基於前端框架的考慮,複雜的UI渲染是需要依賴多個view疊加.比如我們渲染一個複雜的ListView,每一個小的控件,都是一個native的view,然後相互組合疊加.想想此時如果我們的list再需要滑動刷新,會有多少個對象需要渲染.所以也就有了前面所說的RN的列表方案不友好;
  • Flutter 吸收了前兩者的教訓之後,在渲染技術上,選擇了自己實現(GDI),由於有更好的可控性,使用了新的語言Dart,避免了RN的那種通過橋接器與Javascript通訊導致效率低下的問題,所以在性能方面比RN更高一籌;有經驗的開發者可以打開Android手機開發者選項裏面的顯示邊界佈局,發現Flutter的佈局是一個整體.說明Flutter的渲染沒用使用原生控件進行渲染
react-native框架原理圖

Flutter實現跨平臺採用了更爲徹底的方案。它既沒有采用WebView也沒有采用JavaScriptCore,而是自己實現了一臺UI框架,然後直接系統更底層渲染系統上畫UI。所以它採用的開發語言不是JS,而Dart。據稱Dart語言可以編譯成原生代碼,直接跟原生通信。

Flutter框架原理圖

Flutter將UI組件和渲染器從平臺移動到應用程序中,這使得它們可以自定義和可擴展。Flutter唯一要求系統提供的是canvas,以便定製的UI組件可以出現在設備的屏幕上,以及訪問事件(觸摸,定時器等)和服務(位置、相機等)。這是Flutter可以做到跨平臺而且高效的關鍵。另外Flutter學習了RN的UI編程方式,引入了狀態機,更新UI時只更新最小改變區域。

系統的UI框架可以取代,但是系統提供的一些服務是無法取代的。Flutter在跟系統service通信方式,採用的是一種類似插件式的方式,或者有點像遠程過程調用RPC方式。這種方式據說也要比RN的橋接方式高效。

Flutter與RN異同

  • Flutter性能會更好無線接近原生的體驗,Dart是AOT編譯的,編譯成快速、可預測的本地代碼

  • RN採用JS語言開發,基於React,對前端工程師更友好。Dart語言受衆小

  • Flutter自己實現了一套UI框架,丟棄了原生的UI框架。而RN還是可以自己利用原生框架,兩個各有好處。Flutter的兼容性高,RN可以利用原生已有的優秀UI

  • RN的佈局更像css,而Flutter的佈局更像native佈局,但是去掉xml通過代碼直接寫需要適應下

  • Flutter的第三方庫還很少,RN發展的早,雖然也還不完善,Flutter github還有3000多個issues要解決,還有很長的路要走。

沒有更好只有更合適你的框架

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章