Flutter效能監控工具(1)--- Observatory簡介

小德_REN發表於2019-01-27

0x00 前言

Flutter的宣傳說,使用Flutter可以達到60FPS,但是這並不意味,不管你怎麼寫,都能達到60FPS,如果有耗時的操作,可能會阻塞UI的渲染,如果記憶體使用過多,也有可能會OOM,所以效能的好壞,是保證Flutter能否達到60FPS的關鍵,在對Flutter進行效能優化之前,我們先看下如何來監測Flutter的效能。

0x01 Flutter的三種構建模式(build modes)

Flutter有三種構建模式,適用於不同的場景,想要對效能監控,都跑在Profile模式下:

1.Debug

顧名思義,就是除錯模式,在除錯模式下:

  1. Flutter的斷言(Assertions)功能是開的
  2. Flutter的Observatory是開的,Observatory是用於分析和除錯Dart程式碼的工具,用於Dart的debugger
  3. 擴充套件的服務功能(Service extensions)是開啟的,如第二點的Observatory的服務還有效能的服務等。
  4. JIT編譯模式,可以使用Hot Reload,為了快速開發

可以看到,在Debug模式下,為了debug和快速開發,犧牲了效能,所以Debug模式都是用在開發階段。 而且模擬器只能執行Debug模式。

用命令列:

$flutter run
複製程式碼

2.Release

顧名思義,就是要釋出了,在Release模式下,要追求最高的效能和最小的安裝包,所以會:

  1. 斷言(Assertions)功能關閉
  2. 沒有Debugging的資訊
  3. Debugger的功能關閉
  4. AOT編譯,為了快速啟動,快速執行和更小的包裝包大小。
  5. 擴充套件的服務功能(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,多瞭如下的功能:

  1. 一些擴充套件的服務功能(Service extensions)是開啟的,例如監控效能的浮層等。
  2. Tracing是開啟的,Observatory也可以連線到程式

Profile模式只能跑在真機上。

用命令列:

$flutter run --profile
複製程式碼

0x02 使用Observatory來監控效能

Observatory是用於分析和除錯Dart程式碼的工具,因為Flutter自帶Dart VM,所以也可以用Observatory。

1. 命令列啟動 Observatory

Debug下啟用Observatory:

$flutter run
複製程式碼

Profile下啟用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'... Done                       21.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/這個網址,就會看到如下的介面:

Flutter效能監控工具(1)--- Observatory簡介

Observatory支援如下的功能:

  1. Allocation Profile
  2. Code Coverage
  3. CPU Profile
  4. Debugger
  5. Evaluating Expressions
  6. Heap Map
  7. Isolate
  8. Metrics
  9. User and VM Tags

部分功能的截圖如下:

Flutter效能監控工具(1)--- Observatory簡介

Flutter效能監控工具(1)--- Observatory簡介

Flutter效能監控工具(1)--- Observatory簡介

2.Flutter Inspector啟動

Flutter Inspector是一個強大的工具,要想使用Flutter Inspector,就得先執行Flutter APP。

執行Flutter APP後:

  1. 在Android Studio裡

選擇 View > Tool Windows > Flutter Inspector,就可以開啟Flutter Inspector,可以看到有很多功能,如下圖:

Flutter效能監控工具(1)--- Observatory簡介

然後選擇Open observatory。

  1. 在VS Code裡

通過 View > Command Palette 或者 cmd+p開啟命令板,輸入“Open observatory” 然後選擇 Open observatory就行。

Flutter效能監控工具(1)--- Observatory簡介

如果看不到,說明你沒有執行Flutter APP,得以Start Debugging的方式執行。

0x03 Observatory使用

檢視這篇文章:Flutter效能監控工具(3)--- Observatory使用

相關文章