SuperAPI AI 工具集

flutter-performance

编程与开发

查看项目

更新于 10-15 23:41

技能介绍

用途:为 Flutter 应用提供运行时性能约束与优化规范,目标是在低端 Android 或较旧 iPhone 上稳定维持 60fps(每帧不超过 16ms,120Hz 下不超过 8ms)。性能需在 profile 模式实测,而非断言。

主要能力与规则:合法处一律使用 const,const 子树在重建时被框架按标识跳过;将重建范围缩到最小变化组件,用 ref.watch(provider.select((s) => s.field)) 只监听变化字段;长列表或不定长内容使用 ListView.builder、GridView.builder 或 slivers 懒加载;build() 内禁止 jsonDecode、排序、正则、日期计算、文件/网络与大量分配;重 CPU 任务用 compute() 或 Isolate 移出 UI isolate;图片用 cacheWidth/cacheHeight 或 ResizeImage 按显示尺寸解码,首屏图用 precacheImage;优先选用最轻量组件(ColoredBox/DecoratedBox 替代 Container,SizedBox 做间距,FadeTransition 替代 Opacity);在独立重绘子树外包 RepaintBoundary,但避免滥用;通过 child: 传入昂贵子组件,避免每帧重建;在 dispose() 或 ref.onDispose 中释放控制器、订阅、定时器等,会话状态用 autoDispose。

使用方式:以 flutter run --profile 在真实低端设备运行,用 DevTools 的 Performance 录制卡顿,判断耗时在 Build、Layout 还是 Raster;Build 重则缩小重建范围、加 const、移出 build() 工作;Raster 重则减少 Opacity/clip/saveLayer、加 RepaintBoundary、简化着色器;用 Track widget rebuilds 定位频繁重建组件,每次只修一个瓶颈并重新测量。

适用场景:Flutter 应用性能优化、代码评审与性能验收。限制:调试模式计时无意义,必须 profile 模式真机测量;无 profile 数据时不应过早优化;RepaintBoundary 滥用会增加图层内存;CustomPainter 的 paint() 内不得分配 Paint/Path,shouldRepaint 应为单值比较。相关技能包括 state-management-riverpod、widget-composition、custom-canvas-and-gestures、testing-strategy。