很多兄弟在后台留言:“用了上次推荐的工具库,开发快是快了,但 App 跑起来总感觉有点‘飘’,列表滑动偶尔掉帧。” 今天不整虚的,直接盘点我在实际项目中遇到的性能“杀手”,并给出一套能够落地的优化方案。文末附送一份**《Flutter 性能自查 Checklist》**,建议收藏备用。
一、 为什么你的 Flutter App 会卡?
Flutter 虽然号称高性能,但一旦代码写得“奔放”,UI 线程(UI Thread)超过 16ms 没渲染完一帧,卡顿就产生了。大多数卡顿不是 Flutter 的锅,而是我们**“姿势不对”**。
二、 避坑指南:这 3 个“性能杀手”一定要改
1. build() 方法里的“隐形炸弹”
错误示范: 在 build() 方法里做复杂的计算、JSON 解析,或者每次都 new 一个复杂的对象。
后果: build 会被频繁调用,你的 CPU 就在做无用功。
优化方案:
-
耗时逻辑放到 isolate 或 Future 中。
-
善用 const 构造函数(这是 Flutter 优化的核心!)。
-
代码对比: 展示一段没用 const 和用了 const 的 Widget 树重绘区别。
2. 滥用 Opacity (透明度)
痛点: 设计师最爱透明度,但直接用 Opacity Widget 成本极高,它会触发图层重绘。
优化方案:
-
如果是图片,直接让 UI 切带透明度的图。
-
如果是颜色,使用 .withOpacity() 方法,而不是包一层 Opacity Widget。
Code Snippet:
Dart
// ❌ 昂贵
Opacity(opacity: 0.5, child: Container(color: Colors.red));
// ✅ 高效
Container(color: Colors.red.withOpacity(0.5));
3. ListView 的错误打开方式
痛点: item 稍微复杂一点,长列表滑动就掉帧。
优化方案:
必须使用 ListView.builder(懒加载)。
高级技巧: 讲解 itemExtent 属性。如果你知道列表项的高度是固定的(比如 50.0),一定要设置这个属性!这能让 Flutter 免去计算高度的过程,性能提升显著。
三、 进阶:如何定位卡顿?(授人以渔)
不要靠感觉,要靠数据。
工具推荐: Flutter DevTools。
实操: 截图展示 Performance Overlay 开启后的样子。告诉大家:看到绿色条条变红,就是我们要优化的地方。
四、 独家私藏:性能优化 Checklist (部分预览)
在发版前,我会对照这份清单检查一遍代码:
-
是否所有的纯展示 Widget 都加上了 const?
-
列表是否使用了 ListView.builder 且设置了 itemExtent?
-
是否在 build 方法中避免了大规模 I/O 操作?
-
图片是否使用了 cacheWidth/cacheHeight 进行内存压缩? ...
性能优化是一个持续的过程,没有最好的代码,只有更适合场景的代码。
🎁 福利时间 为了方便大家在项目中自查,我整理了一份**《Flutter 高性能开发自查思维导图.pdf》**,涵盖了渲染层、逻辑层、安装包体积优化等 20+ 个细节。 👉 关注公众号,后台回复【性能】,即可免费获取。