效能常見問題和回答

本篇收集了一些關於評估和除錯 Flutter 效能的常見問題。

  • 我的 Flutter 應用程式很卡頓,效能很糟糕。怎麼樣才能修復這些問題?

  • 我如何才能知道 Flutter 應用程式中哪些 widget 在哪一幀中被重新建立?

    • widgets/debug.dart 中的 debugProfileBuildsEnabled 設定為 true。

    • 或者,改變 widgets/framework.dart 中的 performRebuild 函式,忽略 debugProfileBuildsEnabled,並始終呼叫 Timeline.startSync(...)/finish

    • 如果你使用 IntelliJ,就可以看見這些資料的檢視。在 IntelliJ 的 Flutter Performance 工具中勾選 Track widget rebuilds,你就能在 IDE 中直觀地看見哪些 widget 進行了重建。

  • 如何解決我的應用程式因高消耗的 Dart 非同步函式呼叫阻塞了 UI 執行緒,而導致動畫效果不佳?

  • 我如何才能對正在執行的應用程式進行截圖,並將其匯出 SKP 檔案?

    • 執行 flutter screenshot --type=skia --observatory-uri=... 指令

    • 注意,一個檢視截圖的已知問題:

    • 分析和視覺化 SKP 檔案,請使用 Skia WASM debugger

  • 如何從裝置上讀取著色器持久化快取?

    • 在 Android 上,你可以進行以下操作:

      adb shell
      run-as <com.your_app_package_name>
      cp <your_folder> <some_public_folder, e.g., /sdcard> -r
      adb pull <some_public_folder/your_folder>
      
  • 我如何在 Fuchsia 中進行追蹤?