359 字
2 分钟
Flutter App 的优化小记
主要耗时
flutter:Animator:RequestFrame
- 动画flutter:Runtime:Controller
- 负责控制Flutter应用的运行时TimelineTask.start
- 时间线任务Tween.transform
- 动画计算GrowableList
- 列表内存分配
建议
动画
- 使用
RepaintBoundary
:对于需要频繁重绘的区域,可以使用RepaintBoundary
来隔离重绘范围,避免整个屏幕重绘。 - 优化
Tween.transform
:确保动画插值逻辑简单且高效。复杂的动画可以通过减少帧率或降低插值计算复杂度来优化。
GrowableList.add/toList
- 预先分配列表大小:如果可以预估列表大小,尽量避免动态扩展列表。使用
List.filled()
或者指定初始容量来减少内存分配次数。 - 减少集合操作:尽量减少对集合(如
GrowableList
)的频繁操作,尤其是在性能关键路径中。如果必须使用集合操作,可以考虑使用更高效的数据结构,如Set
或者Map
。
TimelineTask.start
- 避免不必要的任务启动:检查是否有不必要或重复启动的任务。可以通过懒加载或延迟初始化来减少任务启动次数。
避免过多的UI重绘
- 确保在UI更新时,只更新需要变化的小部分,而不是整个界面。可以通过使用
shouldRepaint()
方法来控制哪些部分需要重新绘制。 ref.watch(provider).property
=>ref.watch(provider.select((p) => p.property))
- 将
setState
影响的范围缩小到最小 - 使用
const
构造函数
Flutter App 的优化小记
https://blog.lpkt.cn/posts/a-flutter-app-opt/