iOS原生 VS Flutter評測

本人以前分別嘗試用iOS原生和Flutter寫了同一個小應用, 一個空氣質量查詢App, 名字叫Aireport, 目前已經分別上架了App Store.

Aireport(iOS原生)swift

Aireport Flutter(Flutter版)app

Aireport本來是我本身在用, 可是在初步學習了Flutter後我決定用Flutter最大限度的去模仿iOS原生版的應用, 以評估Flutter是否有能力作到以假亂真的地步. 咱們在上一篇文章中已經探討了Flutter在開發中可能遇到的問題, 這篇文章咱們將着重放在二者用戶在實際體驗中的差距.框架

1.安裝包大小

安裝包大小決定了用戶等待下載的時間和可能會耗費的流量, 即使是即將邁入5G時代的今天, 咱們依然須要儘可能優化應用安裝的大小.post

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會在關閉不久後直接被系統幹掉.ui

4.流暢度

從框架一出現,60FPS彷佛始終貫穿於各大Flutter的介紹和分析文章中, 這讓咱們對Flutter的流暢度很是期待.然而:code

上面是iOS原生App的幀率, 下面是Flutter的幀率, 很明顯這是一個尷尬的結果.Flutter應用在運行過程當中頻繁出現了紅色的警告, 這代表應用在這段時間沒沒有以60幀的速度完美渲染出頁面.

這種幀率的差距也體如今了實際使用中. 不管是頁面的切換, 仍是ListView的滾動, Flutter都僅僅能達到還算流暢的程度, 但明顯還達不到iOS原生60幀的絲般順滑. 固然, 目前的Flutter還處在Beta版, 並且我我的認爲, 相對於安裝包大小和啓動速度, 運行時的流暢度更容易進行優化. 我相信Flutter將在以後的版本中進一步優化應用的流暢度, 達到與原生媲美的程度.cdn

5.iOS特性支持

iOS應用開發受益於強大的iOS系統和豐富的生態體系, 天生就具備大量實用且不可替代的特性, 例如Bitcode可以在雲端自動優化咱們App的代碼, 原生應用默認就支持增量更新、後臺應用刷新等等.

很顯然Apple賦予iOS應用的這些種種特性與Flutter應用是無緣的, 若是Flutter可以支持熱更新的化那麼其可用價值就高了許多. 但目前實現起來還有諸多問題, 包括部署、性能問題, 以及蘋果對於熱更新的謹慎態度.

綜合了目前Flutter在開發中的體驗以及和原生應用的比較, 我目前對Flutter的評估結果是: 再等等.

Flutter的確提供了一種不一樣於目前其餘跨平臺開發框架的思路, 也極有可能成爲將來跨平臺開發的標杆. 若是你是我的開發, 我仍是建議你學習一下Flutter, 它的Dart語言、Wiget化、數據綁定、單向數據流等等現代特性值得你去了解. 同時對於沒法同時掌握多個移動開發平臺的小夥伴而言, 使用Flutter也是一種成本較爲低廉的方法. 可是對於公司而言, Flutter還沒法徹底投入生產環境, 並且初期Flutter的開發成本未必會低於原平生臺.

目前Fuchsia的開發進度還不得而知, Flutter也還處在Beta3階段. 相信等Fuchsia正式發佈的時候纔是檢驗Flutter正在實力的時候.

相關文章
相關標籤/搜索