1. 程式人生 > >Flutter和iOS原生效能對比測試

Flutter和iOS原生效能對比測試

開篇

剛剛起步看了兩個月Flutter,感覺和之前那些跨平臺框架略有不同,我認為已經到跨平臺時代的3.0(隨便說說哈)。 現在Flutter是谷歌主推的一個東西,感覺還是有點期待。下面是一個Flutter的Demo和自己做的一個基本功能差不多的iOS原生Demo做一個性能對比。

正文

下文使用,從記憶體使用率、CPU使用率、FPS和包體積方面去做對比。注意:圖片解析度都是 1000 * 1000的量級。

Demo頁面

Flutter Demo頁面

iOS原生Demo頁面

當然iOS和Flutter Demo從一些UI和設計風格上略有不同。但是基本在關鍵點上面已經做到基本一致。

CPU使用率-Flutter vs iOS原生

Flutter

上圖所示,測試5分鐘雙圖片列表滑動3分鐘之前是一直下拉滑動載入圖片列表。3分鐘之後是靜止等圖片顯示完。 滾動時候的尖刺是因為網路下載時候cpu使用率最高達113%,平均達55%左右。因為用到了Stateful的Widget所以會有不斷重新整理介面的操作所以cpu會在多圖情況下cpu使用率平均38%左右。

iOS原生

上圖所示,使用一開始比較經典的對比,有突刺的是滑動下載和載入圖片的時候最高在115%CPU使用率。在1分鐘到1分30秒區間中是滾動在已經下載好的圖片,平均在18%左右的使用率。和Flutter 對比靜止和滾動時候其實都是iOS原生好點。

結果

平均 最高 靜止
55 113 38
18 115 0

原生略勝。

記憶體使用率-Flutter vs iOS原生

Flutter

測試了6分鐘,其中從1分鐘到3分鐘不斷下拉不斷下載圖片時間,記憶體最高使用率到263Mib。

iOS原生

使用SDWebImage框架之後,並且設定最大使用記憶體之後原生保持在 400Mib左右。

這個回合,如果不額外處理的話,Flutter勝出。

記憶體使用率-Flutter vs iOS原生

Flutter

這個表現良好基本在58以上,不過是因為Flutter每一秒都會重新整理介面的緣故吧~~所以我不動貌似都會重新整理,並且是在FPS為58以上。GPU使用率最高會利用到68%,其他都保持在30%左右。這麼厲害的記憶體洩漏是因為使用了圖片框架造成的可以忽略,不是Dart或者Flutter本來的問題。

iOS原生

iOS原生滾動的時候,這是使用SDWebImage處理結果大約都在57fps以上。GPU使用率比Flutter低,還需要優化,不過還有一個問題,Flutter靜止影象的時候還會使用GPU,而原生在靜止時候,就不會使用GPU了。

這方面原生略微勝出。

包體積-Flutter vs iOS原生

iOS原生 Flutter
11.4MB 213KB

Flutter沒有優化的時候,比原生大10M左右,這個是因為Flutter.ipa裡面App.framework和Flutter.framework包比較大,所以這個回合是原生勝。

Flutte包體大小優化可以參考閒魚的:mp.weixin.qq.com/s/IIoaY2uw6…

但是這個包體大小已經沒有什麼空間可以優化了,因為邏輯比較少,所以基本做不到很大的優化。

總結

Flutter其實效能和原生不會相差十分遠,但是也有缺陷,比如不斷使用GPU(在Stateful控制元件中),而且程式設計風格和部分控制元件風格也和iOS相差比較遠。還有一些生命週期方面的方法也相對少。但是Flutter有接近前端的佈局語法和相對簡單的Api也是讓新學習的同學很快地上手。