性能常见问题和回答

本篇收集了一些关于评估和调试 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 中进行追踪?