關於 Flutter 的一些想法

關於 Flutter 的一些想法

來自專欄 THINK.DESIGN.CODE

Flutter 應該是目前比較熱門的一項技術 —— 高效的開發效率,一套代碼可以支持 Android/iOS 雙端運行,Google 新的操作系統 Fuchsia 的默認 UI Toolkit 等等,都吸引了開發者社區大量的關注。

對還沒接觸過 Flutter 的開發者來說,首先要問的就是 Flutter 是什麼?它在客戶端開發的技術棧中處於什麼位置?跟哪些技術比較相似,跟哪些技術存在相互競爭的可能?它的優點是什麼?本文試圖按照自己的理解來回答這些問題。

What is Flutter

Flutter 是一個內置了布局引擎,渲染引擎,完全自繪 UI 界面的 UI Toolkit 和應用框架,使用 Dart 作為應用開發語言,採用 React 的方式編寫 UI,支持一套代碼在 Android/iOS 上雙端運行。

在 Flutter 開發之初,就有一些非常重要的設計原則:

  • 開發效率至關重要

UI 代碼的編寫支持代碼 Hot Reload,開發者在修改 UI 界面後,修改的代碼馬上被發送到已經部署了應用的設備上重新載入,同時應用的狀態(特定對象)得以保留,開發者可以馬上看到修改後的效果。重視開發工具鏈,Flutter 有完善的開發,調試,測試,性能分析環境。一套代碼可以同時生成 Android/iOS 應用,雙端運行,使業務方只需要組建一個移動開發團隊,降低開發成本。

  • 充分發揮設備性能

渲染引擎使用 Skia 通過 GPU 做光柵化。應用的 Dart 代碼在生成發布版本時,會生成真正的機器碼直接運行在目標設備上,不再需要解析器解析運行或者 JIT,並且支持 Dead Code Removal 最小化發布版的 Binary 大小(這也是為什麼選擇 Dart 語言的主要原因,開發過程可以動態解析執行提高開發效率,發布時可以生成機器碼最大化性能)。

Eric Seidel 是參與 Flutter 開發最早的幾位開發者之一,他的 What is Flutter 的訪談,談到了當時為什麼開發 Flutter,Flutter 設計初期的一些主要設計原則等。這個訪談可以讓讀者獲得一個不錯的概覽。

Eric 在開發 Flutter 之前是在 Chrome 團隊做排版和渲染。Flutter 早期的幾位開發人員都來自 Chrome 團隊,所以我們會看到 Flutter 的渲染流水線的設計跟瀏覽器有很多相似之處,甚至排版引擎的對象命名,如 RenderObject 等。 當然這些只是設計上的相似,實際上的運行有本質的區別。

Flutter vs Native

在客戶端開發的技術棧,假設我們分成 Native(原生 SDK 開發),Hybird(RN,Weex)和 Web 這三層,Flutter 所處的位置大概在 Native 和 Hybrid 之間,它最直接的競爭的對象就是 Native。

應該說自繪 UI 界面的跨平台 UI Toolkit 這個概念並不新鮮,Qt 就是這裡面最有名的一個,Qt 很早就有做移動平台,後面新設計的 QML 在設計理念上也有很多先進的地方,包括使用 JavaScript 作為開發語言基於 v8 運行,QML 作為界面描述語言,使用 GPU 光柵化等等。當時 Qt 在移動平台上跟 Native 的競爭完全落敗,那 Flutter 會有機會嗎?

我自己覺得是有的,一方面 Flutter 的一些設計理念更先進,像開發過程的 Hot Reload,發布時直接生成機器碼,React 的方式編寫 UI 等等;另外一方面 Google 相比 Qt 一個小團隊也有更多資源去推廣和支持 Flutter,Google 本身的背書也讓開發者更有信心。

最重要的是我自己認為在當前,Native 被取代的時機更成熟了,第三方應用框架帶來的 Binary 大小增加,載入和初始化耗時增加,性能下降等負面因素已經變得越來越不重要,特別是 Flutter 在這方面表現的還很不錯,比如說 Flutter Runtime 在 Android 上大概只增加 7m+ 的 APK 大小。而 Flutter 的高效率,低成本對開發者,特別是中小開發團隊來說是非常有吸引力的。從長遠來看,Native 被 Flutter 取代的概率會變得越來越高。如果你是一個中小團隊的開發者,開發一個中等規模的新應用,也不像遊戲或者直播這種應用需要直接訪問 GPU,那從現在開始就使用 Flutter 已經變成了一個非常可能的選擇。如果你開發的是一個大型的應用,需要使用 Native + Hybird,或者 Native + Web,在這種情況使用 Flutter 去取代 Native 可能倒不是一個好的選擇,或者可以考慮局部使用 Flutter。

早前看的一些科技博客,也有其它作者表達相似的想法,Kotlin,Swift 很有可能會變成 DOA(Dead On Arrival)。

這裡被取代並不是指完全不用 Native,或者沒有應用使用 Native 開發,只是使用 Native 的比例和概率越來越低。

推薦閱讀:

移動開發每周閱讀清單:第五十六期
一個渣碩iOS春招總結
翻譯 | 如何構建聊天界面
DevOpsDays大會,818坐標上海,我們來啦!!!
為什麼寫這本書《Mac App開發基礎教程》

TAG:Android | Flutter | 移動開發 |