Flutter DevTools (App性能检测)使用记录
type
status
date
slug
summary
tags
category
icon
password
学习内容
 
使用wandroid 的 api 花了 断断续续的时间写代码(四天),我的学习热情也逐渐减低(好想能多线程把KVMM,Jectpack Compose 学完呀!),最近打开写完的项目 ,想去优化一下, 又重燃我的热情了,下面这篇文章是关于如何使用Android Studio 自带的工具套件 DevTool ,做Flutter的性能检测 ,记录下这个学习。
 
DevTool是什么 ?
是对于Dart 和Flutter 开发人员的 一个工具套件, 有布局检查工具,性能工具,内存工具… 一些常用的调试工具被置在这个web套件中。
 
我打算 github 搞多个分支出来是作为优化版的代码 ,而默认分支则作为bug分支。
 
DevTool 的开启
( vscode / androidstudio / command line )
我用的是Android Studio, 你可以在 run / debug 应用 之后, console 控制台右边看到 devtool 的图标 ,点击即可启动
也可以使用命令去启动 :
flutter run --profile 旧命令
点击 h (-help)命令缩写,会弹出 flutter 调试页面命令列表
 
比如我想打开 DevTools ,可以输入v ,之后会自动跳转到系统默认浏览器,命令页面如下:
notion image
 
 
Flutter Inspector
布局渲染相关的问题,可以在 Flutter Inspector 查看 FLutter 应用程序的总体布局。
如果你在调试布局样式的时候,看到有 一条黄黑条纹的警告条,这说明你的应用存在渲染溢出的问题。
这时候你查看应用的布局树,可查看对应的 Recent Object ,看有哪些是不受约束。不过说实话,我觉得看应用层级树去排查问题有点难度 。
notion image
使用一个叫 Layout Explorer 的玩意 ,用它能实现实时调整溢出的布局代码,协助你找到需要修改的布局代码,但这玩意我个人觉得使用起来有点鸡肋,如果能直接指向有渲染溢出的代码去修改不是更方便吗?
 
Performace
notion image
上图是提示我着色器导致的动画卡顿,我可以通过添加多命令的方式去处理这个问题。https://docs.flutter.dev/perf/shader 官方文档有给我们总结了情况。
 
之后我们可以看到 超过60fps 的地方有哪些。
这里展示了应用传入的所有时间轴的活动,如果你看到这些60FPS的高帧频的柱形条,要留意下是哪块代码可能存在问题了。
notion image
 
点击Timeline Event, 你能看到Flutter 框架中的异步事件,传入的http,API事件,Dart线程以及UI线程 。
notion image
占用CPU 耗费太多时
 
Track Widget Builds ,这里反映绘制的一些情况。
notion image
notion image
 
 
Memory
内存分布的情况
notion image
总大小 12.7mb 算小?
内存消耗 是 200 - 250 m 之间波动
我得学习下 怎么查 webview的内存分析
 
notion image
请求接口的耗时 362.9ms -1000+ms 都有, 这个得优化, 数据请求耗时
CPU Profiler ,使用了 recording 功能,很久未响应。 可能是我用模拟器的原因。
终于跑出来了,是太慢了
notion image
notion image
拿我第一项CPU 占用来说,打开后我们会发现 RenderObject 这个 父类耗时比较久,算正常的,这部份内容是跟flutter 渲染绘制有关的 。
 
之后我继续切换 callTree 相关的内容
notion image
可以看到 ,我们callTree 也类似前面的
 
notion image
Method Table 这个功能 右上角 有一个Search 搜索框 ,我们可以匹配包名 ,这里我匹配到的是31个地方,我继续检查。
去查看自己项目代码的占比份额。 举例 图中的,可以看到这里是json 解析相关的代码,我 感觉这个可以不用优化。
notion image
 
  1. 橙色 是匹配 search 搜索向下查询
  1. 是黄色 是匹配 search 框查找结果
  1. 灰色 是鼠标点击选中的一项
  1. 呼叫者 单词翻译,从程序角度 这里应该是调用者???? (这里有待斟酌)
  1. callee 可以看到 5 这个地方是 指 调用的代码 所引用的方法。
就我现在这个项目,这个地方暂时我没有发现有需要优化的地方,感兴趣的友友们,可以下我bug版代码测下。(你很无聊的话)
 
好了,之后就是CPU Profile 的最后一个部分,CPU Flame Chart (确定 CPU 繁忙的原因是性能分析的一项例行任务 )
notion image
notion image
右边有个类似倒三角的按钮 ,能过滤。这里我选了Natvie层 和 Flutter 相关的库的过滤 ,也可以自定义过滤查询。
 
notion image
 
Memory :查看Dart 和 Android 的内存 情况,或者当发生垃圾收集时,你能查看代码的分布情况, 实例的占用
notion image
 
Network 页面是收集传入的Http请求,我们可以看到的抓包的请求信息,计时的数据等。
 
Debugger 源码调试器 ,我们在IDE 调试断点的功能 都有,跨过,进入,查看对应的变量,可以搜索源代码查看,断点对应的字段数据。
notion image
 
Logging
GC时间,常规的控制台日志 或者我们标记的日志
如下图,捕获了一个gc问题, 原因是 idle 造成的
notion image
 

© Anne 2021-2025