Flutter效能監控工具(1)--- Observatory
Flutter的宣傳說,使用Flutter可以達到60FPS,但是這並不意味,不管你怎麼寫,都能達到60FPS,如果有耗時的操作,可能會阻塞UI的渲染,如果記憶體使用過多,也有可能會OOM,所以效能的好壞,是保證Flutter能否達到60FPS的關鍵,在對Flutter進行效能優化之前,我們先看下如何來監測Flutter的效能。
0x01 Flutter的三種構建模式(build modes)
Flutter有三種構建模式,適用於不同的場景:
1.Debug
顧名思義,就是除錯模式,在除錯模式下:
- Flutter的斷言(Assertions)功能是開的
- Flutter的Observatory是開的,Observatory是用於分析和除錯Dart程式碼的工具,用於Dart的debugger
- 擴充套件的服務功能(Service extensions)是開啟的,如第二點的Observatory的服務還有效能的服務等。
- JIT編譯模式,可以使用Hot Reload,為了快速開發
可以看到,在Debug模式下,為了debug和快速開發,犧牲了效能,所以Debug模式都是用在開發階段。 而且模擬器只能執行Debug模式。
用命令列:
$flutter run 複製程式碼
2.Release
顧名思義,就是要釋出了,在Release模式下,要追求最高的效能和最小的安裝包,所以會:
- 斷言(Assertions)功能關閉
- 沒有Debugging的資訊
- Debugger的功能關閉
- AOT編譯,為了快速啟動,快速執行和更小的包裝包大小。
- 擴充套件的服務功能(Service extensions)關閉
所以,Release模式是APP要釋出的時候才用。
Release模式只能跑在真機上。
用命令列:
$flutter run --release 複製程式碼
或者
$flutter build 複製程式碼
3.Profile
Profile是專門監控效能的模式,在Debug模式下,不能實際反應應用的效能,而在Release模式下,卻沒有監控的功能,所以就誕生了Profile模式,Profile模式和Release模式更接近,Profile和Release都採用的AOT編譯,所以都不能用Hot Reload,但是Profile相對於Release,多瞭如下的功能:
- 一些擴充套件的服務功能(Service extensions)是開啟的,例如監控效能的浮層等。
- Tracing是開啟的,Observatory也可以連線到程序
Profile模式只能跑在真機上。
用命令列:
$flutter run --profile 複製程式碼
0x02 使用Observatory來監控效能
Observatory是用於分析和除錯Dart程式碼的工具,因為Flutter自帶Dart VM,所以也可以用Observatory。
但是要用Observatory的話,Flutter必須得用命令列啟動才行。
Debug下啟用Observatory:
$flutter run 複製程式碼
Release下啟用Observatory:
$flutter run --profile 複製程式碼
執行完命令後,會看到如下的資訊:
$ flutter run --profile Initializing gradle...0.8s Resolving dependencies...6.6s Launching lib/main.dart on ALP AL00 in profile mode... Gradle task 'assembleProfile'... Gradle task 'assembleProfile'... Done21.2s Built build/app/outputs/apk/profile/app-profile.apk (66.5MB). Installing build/app/outputs/apk/app.apk...5.4s D/mali_winsys(18612): EGLint new_window_surface(egl_winsys_display *, void *, EGLSurface, EGLConfig, egl_winsys_surface **, EGLBoolean) returns 0x3000 An Observatory debugger and profiler on ALP AL00 is available at http://127.0.0.1:57535/ For a more detailed help message, press "h". To quit, press "q". 複製程式碼
這一句:
available at http://127.0.0.1:57535/ 複製程式碼
開啟 http://127.0.0.1:57535/
這個網址,就會看到如下的介面:

Observatory支援如下的功能:
- Allocation Profile
- Code Coverage
- CPU Profile
- Debugger
- Evaluating Expressions
- Heap Map
- Isolate
- Metrics
- User and VM Tags
部分功能的截圖如下:


