用途
compose-performance-audit 用于对 Jetpack Compose 视图性能进行端到端审计,从插桩、基线测量到根因分析和具体修复步骤。适用于被要求诊断渲染缓慢、滚动卡顿、过度重组等问题的场景。
工作流程
该技能采用决策树式流程:
- 若用户提供代码,从“代码优先审查”开始;若用户只描述症状,先索取最小代码/上下文,再进行代码审查。
- 若代码审查无法定论,引导用户进行性能剖析,并索取 Layout Inspector 输出或 Perfetto 追踪数据。
- 分析诊断,按影响排序 Compose 常见问题。
- 应用针对性修复。
- 验证优化效果。
代码优先审查
收集目标 Composable 代码、数据流(state、remember、derived state、ViewModel 连接)、症状与复现步骤。重点关注:不稳定参数或大范围状态变更导致的重组风暴;LazyColumn/LazyRow 中不稳定键;组合阶段的重计算(格式化、排序、过滤、对象分配);不必要的重组(缺少 remember、不稳定类、lambda);大图片缺少尺寸约束或异步加载;布局抖动(深层嵌套、固有测量、SubcomposeLayout 误用)。
性能数据采集指引
技能会说明如何采集数据:使用 Android Studio 的 Layout Inspector 查看重组次数;启用 Compose 工具中的重组高亮;使用 Perfetto 或 System Trace 分析帧时序;检查 Macrobenchmark 的启动/滚动指标。需索取 Layout Inspector 截图、Perfetto 追踪导出、设备/系统/构建配置。特别强调性能剖析应在启用 R8 的 release 构建上进行,debug 构建开销较大。
分析与修复
分析阶段优先排查 Compose 常见问题,并用追踪/Layout Inspector 证据总结发现。修复建议包括:用 @Stable 或 @Immutable 注解稳定数据类;为懒加载列表使用稳定唯一 ID 作为键;用 derivedStateOf、lambda 修饰符或 Modifier.drawBehind 延迟状态读取;用 remember { } 包裹昂贵计算;提取稳定 Composable 并用 key() 控制身份;用 Coil/Glide 异步加载图片并约束尺寸;扁平化布局层级。
常见代码坏味道与修复
技能提供示例代码对比,涵盖不稳定 lambda 捕获、组合阶段重计算、LazyColumn 缺少键、不稳定数据类、过早读取状态、组合阶段对象分配等,并附有稳定性检查清单(原始类型默认稳定;List/Map/Set 不稳定,建议使用 kotlinx 的 ImmutableList;含 var 属性的类不稳定;lambda 默认不稳定,建议用 remember)。
验证
要求用户重新运行 Layout Inspector 对比重组次数、运行 Macrobenchmark 对比帧时序、在真机 release 构建上测试,并总结重组次数、掉帧、卡顿的前后差异。
输出
提供简短的指标表(如有前后数据)、按影响排序的顶部问题、带预估工作量的修复方案。
限制
该技能的效能依赖用户提供的代码、症状描述或性能追踪数据;没有这些输入时,只能先引导采集数据。文中未说明该技能的具体平台形态(如是否为独立工具或插件)、收费方式或安装命令。