Aireport原本是我自己在用, 但是在初步學習了Flutter後我決定用Flutter最大限度的去模仿iOS原生版的應用, 以評估Flutter是否有能力做到以假亂真的地步. 我們在上一篇文章中已經探討了Flutter在開發中可能遇到的問題, 這篇文章我們將著重放在兩者使用者在實際體驗中的差距.
1.安裝包大小
安裝包大小決定了使用者等待下載的時間和可能會耗費的流量, 即便是即將邁入5G時代的今天, 我們依然需要儘量優化應用安裝的大小.
Flutter應用安裝包和安裝後容量
iOS原生應用安裝包和安裝後容量 雖然Flutter的結果我多少能夠猜到, 但安裝包9倍, 磁碟佔用4倍的差距還是讓我感到失望, 何況如果我使用OC開發的話安裝包還能進一步縮小(WWDC有可能將swift設為穩定版嵌入iOS系統核心, 屆時swift版將有望自動瘦身). 由於專案很小就百行程式碼, 因此這30MB的空間佔用基本就是Flutter的SDK容量.30MB的空間對於一款App來說已經是一個不小的數字, 而且應用之間不能共享SDK, 有幾個Flutter應用就會有幾個Flutter SDK. 這讓技術團隊在選擇開發框架時不得不著重考慮一下今後App的容量問題.2.啟動速度
上面的應用容量除了影響磁碟佔用外, 對啟動速度也會有影響. 我在iPhone X上實測了一下, iOS原生應用的冷啟動速度大概是在0.4秒左右, 而Flutter的冷啟動速度在1.5秒左右.
毫無意外iOS這一局又佔上風. Flutter的啟動過程首先會去跑完完整的iOS原生應用的所有流程直至第一個ViewController例項化後,再由VC去呼叫載入Flutter SDK, 初始化Flutter的執行時環境. 也就是說Flutter應用的啟動時間=iOS原生應用的啟動時間+Flutter環境的啟動時間. 使用者對於應用的容量佔用幾乎很難察覺, 但是應用的啟動時間對使用者體驗的影響絕對是致命的(雖然現在的啟屏廣告已經完全不考慮使用者體驗了). 在這一點上不知道往後Google團隊還有沒有優化的空間.3.記憶體佔用
記憶體佔用一直是移動開發中的一個優化重點.不過目前來看Release版的Flutter在記憶體佔用這一塊也沒有任何優勢, SDK拖累是一方面, 單個頁面記憶體佔用也比原生多一倍.
注意, 我們知道Flutter在Build版本中的效能和Release是不一樣的, 同一個應用, Build版的記憶體佔用在100M左右, 為了熱載入我也是忍了.記憶體佔用不僅影響著應用效能、電池損耗、 程式穩定性, 最重要但是, 記憶體佔用越大, 被系統幹掉後臺的可能性就越大. 我自己的使用體驗來看, iOS原生的Aireport基本上大部分時間都處於休眠狀態, 而Flutter會在關閉不久後直接被系統幹掉.
4.流暢度
從框架一出現,60FPS似乎始終貫穿於各大Flutter的介紹和分析文章中, 這讓我們對Flutter的流暢度非常期待.然而:
上面是iOS原生App的幀率, 下面是Flutter的幀率, 很明顯這是一個尷尬的結果.Flutter應用在執行過程中頻繁出現了紅色的警告, 這表明應用在這段時間沒沒有以60幀的速度完美渲染出頁面.這種幀率的差距也體現在了實際使用中. 無論是頁面的切換, 還是ListView的滾動, Flutter都僅僅能達到還算流暢的程度, 但明顯還達不到iOS原生60幀的絲般順滑. 當然, 目前的Flutter還處在Beta版, 而且我個人認為, 相對於安裝包大小和啟動速度, 執行時的流暢度更容易進行優化. 我相信Flutter將在之後的版本中進一步優化應用的流暢度, 達到與原生媲美的程度.
5.iOS特性支援
iOS應用開發受益於強大的iOS系統和豐富的生態體系, 天生就具有大量實用且不可替代的特性, 例如Bitcode能夠在雲端自動優化我們App的程式碼, 原生應用預設就支援增量更新、後臺應用重新整理等等.
很顯然Apple賦予iOS應用的這些種種特性與Flutter應用是無緣的, 如果Flutter能夠支援熱更新的化那麼其可用價值就高了許多. 但目前實現起來還有諸多問題, 包括部署、效能問題, 以及蘋果對於熱更新的謹慎態度.綜合了目前Flutter在開發中的體驗以及和原生應用的比較, 我目前對Flutter的評估結果是: 再等等.
Flutter的確提供了一種不同於目前其他跨平臺開發框架的思路, 也極有可能成為未來跨平臺開發的標杆. 如果你是個人開發, 我還是建議你學習一下Flutter, 它的Dart語言、Wiget化、資料繫結、單向資料流等等現代特性值得你去了解. 同時對於無法同時掌握多個移動開發平臺的小夥伴而言, 使用Flutter也是一種成本較為低廉的方法. 但是對於公司而言, Flutter還無法完全投入生產環境, 而且初期Flutter的開發成本未必會低於原生平臺.
目前Fuchsia的開發進度還不得而知, Flutter也還處在Beta3階段. 相信等Fuchsia正式釋出的時候才是檢驗Flutter正在實力的時候.