本人之前分別嘗試用iOS原生和Flutter寫了同一個小應(yīng)用, 一個空氣質(zhì)量查詢App, 名字叫Aireport, 目前已經(jīng)分別上架了App Store.
Aireport原本是我自己在用, 但是在初步學(xué)習(xí)了Flutter后我決定用Flutter最大限度的去模仿iOS原生版的應(yīng)用, 以評估Flutter是否有能力做到以假亂真的地步. 我們在上一篇文章中已經(jīng)探討了Flutter在開發(fā)中可能遇到的問題, 這篇文章我們將著重放在兩者用戶在實際體驗中的差距.
1.安裝包大小
安裝包大小決定了用戶等待下載的時間和可能會耗費的流量, 即便是即將邁入5G時代的今天, 我們依然需要盡量優(yōu)化應(yīng)用安裝的大小.
Flutter應(yīng)用安裝包和安裝后容量
iOS原生應(yīng)用安裝包和安裝后容量
雖然Flutter的結(jié)果我多少能夠猜到, 但安裝包9倍, 磁盤占用4倍的差距還是讓我感到失望, 何況如果我使用OC開發(fā)的話安裝包還能進(jìn)一步縮小(WWDC有可能將swift設(shè)為穩(wěn)定版嵌入iOS系統(tǒng)內(nèi)核, 屆時swift版將有望自動瘦身).
由于項目很小就百行代碼, 因此這30MB的空間占用基本就是Flutter的SDK容量.30MB的空間對于一款A(yù)pp來說已經(jīng)是一個不小的數(shù)字, 而且應(yīng)用之間不能共享SDK, 有幾個Flutter應(yīng)用就會有幾個Flutter SDK. 這讓技術(shù)團(tuán)隊在選擇開發(fā)框架時不得不著重考慮一下今后App的容量問題.
2.啟動速度
上面的應(yīng)用容量除了影響磁盤占用外, 對啟動速度也會有影響. 我在iPhone X上實測了一下, iOS原生應(yīng)用的冷啟動速度大概是在0.4秒左右, 而Flutter的冷啟動速度在1.5秒左右.
毫無意外iOS這一局又占上風(fēng). Flutter的啟動過程首先會去跑完完整的iOS原生應(yīng)用的所有流程直至第一個ViewController實例化后,再由VC去調(diào)用加載Flutter SDK, 初始化Flutter的運行時環(huán)境. 也就是說Flutter應(yīng)用的啟動時間=iOS原生應(yīng)用的啟動時間+Flutter環(huán)境的啟動時間. 用戶對于應(yīng)用的容量占用幾乎很難察覺, 但是應(yīng)用的啟動時間對用戶體驗的影響絕對是致命的(雖然現(xiàn)在的啟屏廣告已經(jīng)完全不考慮用戶體驗了). 在這一點上不知道往后Google團(tuán)隊還有沒有優(yōu)化的空間.
3.內(nèi)存占用
內(nèi)存占用一直是移動開發(fā)中的一個優(yōu)化重點.不過目前來看Release版的Flutter在內(nèi)存占用這一塊也沒有任何優(yōu)勢, SDK拖累是一方面, 單個頁面內(nèi)存占用也比原生多一倍.
注意, 我們知道Flutter在Build版本中的性能和Release是不一樣的, 同一個應(yīng)用, Build版的內(nèi)存占用在100M左右, 為了熱加載我也是忍了.
內(nèi)存占用不僅影響著應(yīng)用性能、電池?fù)p耗、 程序穩(wěn)定性, 最重要但是, 內(nèi)存占用越大, 被系統(tǒng)干掉后臺的可能性就越大. 我自己的使用體驗來看, iOS原生的Aireport基本上大部分時間都處于休眠狀態(tài), 而Flutter會在關(guān)閉不久后直接被系統(tǒng)干掉.
iOS特性支持
iOS應(yīng)用開發(fā)受益于強大的iOS系統(tǒng)和豐富的生態(tài)體系, 天生就具有大量實用且不可替代的特性, 例如Bitcode能夠在云端自動優(yōu)化我們App的代碼, 原生應(yīng)用默認(rèn)就支持增量更新袒哥、后臺應(yīng)用刷新等等.
很顯然Apple賦予iOS應(yīng)用的這些種種特性與Flutter應(yīng)用是無緣的, 如果Flutter能夠支持熱更新的化那么其可用價值就高了許多. 但目前實現(xiàn)起來還有諸多問題, 包括部署、性能問題, 以及蘋果對于熱更新的謹(jǐn)慎態(tài)度.
綜合了目前Flutter在開發(fā)中的體驗以及和原生應(yīng)用的比較, 我目前對Flutter的評估結(jié)果是: 再等等.
Flutter的確提供了一種不同于目前其他跨平臺開發(fā)框架的思路, 也極有可能成為未來跨平臺開發(fā)的標(biāo)桿. 如果你是個人開發(fā), 我還是建議你學(xué)習(xí)一下Flutter, 它的Dart語言凹嘲、weight化、數(shù)據(jù)綁定、單向數(shù)據(jù)流等等現(xiàn)代特性值得你去了解. 同時對于無法同時掌握多個移動開發(fā)平臺的小伙伴而言, 使用Flutter也是一種成本較為低廉的方法. 但是對于公司而言, Flutter還無法完全投入生產(chǎn)環(huán)境, 而且初期Flutter的開發(fā)成本未必會低于原生平臺.
目前Fuchsia的開發(fā)進(jìn)度還不得而知, Flutter也還處在Beta3階段. 相信等Fuchsia正式發(fā)布的時候才是檢驗Flutter正在實力的時候.