0x00 前言
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'... 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 / 这个网址, 就会看到如下的界面:
Observatory 支持如下的功能:
- Allocation Profile
- Code Coverage
- CPU Profile
- Debugger
- Evaluating Expressions
- Heap Map
- Isolate
- Metrics
- User and VM Tags
部分功能的截图如下:
来源: https://juejin.im/post/5c4c7634e51d453be80171c9