Compose 局部性 × KMP 共享:声明式 UI 在跨端全栈中的性能优化避坑
本文基于 Jetpack Compose 与 Compose Multiplatform(CMP)生产实践,结合derivedStateOf、智能重组与 KMP 共享边界,拆解跨端全栈中多端 UI 不一致与卡顿的根因,并给出可落地的代码与避坑范式。一、局部性本质:KMP 共享与 CMP UI 的边界KMP 的commonMain承载业务逻辑与跨端 UI(CMP),但声明式 UI 的局部性要求:共享层不得依赖平台专有 API,平台差异通过expect/actual隔离。CMP 复用 Jetpack Compose 的重组机制,Android 与 Desktop/iOS 共用同一套 Composable,代码复用率可达 70%–90%。跨端卡顿常源于“共享状态读取范围过大”与“类型不稳定”在多变体上的放大。二、智能重组原理:跳过与作用域最小化Compose 重组最小单位是RecomposeScopeImpl,仅当某个State在 scope 内被读且值变才触发。编译器对稳定类型(原始类型、@Stable/@Immutable类)生成跳过守卫,参数未变则跳过重组。常见陷阱:用ListT作参数被推为 Unstable,导致父层任意变化都强重组子列表。三、derivedStateOf:高频状态的“降频”缓冲区当原始状态高频变、UI 只关心派生低频结果时,derivedStateOf仅在计算结果切换(如 false↔true)才通知重组。错误写法(每次滚动全量重组):kotlin

相关新闻

最新新闻

日新闻

周新闻

月新闻