F7.12.4Simultaneous motion cost stacks设计
同时触发的多个动效会叠加性能开销超出单个动效评估范围
别名: 并发动效 · 叠加开销 · 单条评估失效
概念解释
单条共享元素转场在性能面板上合格,并不代表列表 20 行同时入场时仍然合格。开销是叠加的,评估却常按单条做。同时触发把每帧的布局、上传和填充乘上条数,预算按一条量刚好的运动,在并发时集体掉帧。这和把多段依次播完拉长等待不同:那里加的是墙钟,这里加的是同一帧里的工作量。
机制
每一条运动都要在这一帧求值。N 条变换或许仍能留在合成器,但 N 条模糊、N 条阴影、N 次从脚本读布局,会把主线程和 GPU 一起打满。交错入场的本意是时间错开,若错开间隔小于一帧,对 GPU 来说仍是同一帧的 N 份工作。列表回收再叠上来,可见行都在动时,节点数本身就在涨。
单条评估的盲区是场景组合:导航转场 + 列表入场 + 按钮微弹簧 + 滚动惯性,四条各自「很轻」,峰值落在同一 16 毫秒里。性能预算若不按峰值场景算,上线后的卡都出现在组合里。
边界
- 真正错开到稳定之后再启动下一条,峰值可以接近单条;要看错开是否大于稳定时间,而不是设计稿上的 20 毫秒。
- 合成器能合并的同类变换,叠加比布局动画更线性、更可预测,但仍有层数上限。
- 减弱或低端降级会把并发条数直接砍掉,这是并发问题的正当解,不是另做一套更短的 N 条。
怎么落地
- 在真实峰值场景里测:打开页的那一帧同时有什么在动,按这一帧的帧时间接受或拒绝,不按孤立 demo。
- 限制同时处于飞行中的运动条数;列表入场用少数层而不是每行一条独立动画。
- 验证:性能面板里单独播共享元素是绿的,再打开「带列表的整页进入」。整页变红,单条评估就失效了。