F7.12.4Simultaneous motion cost stacks设计

同时触发的多个动效会叠加性能开销超出单个动效评估范围

别名: 并发动效 · 叠加开销 · 单条评估失效

概念解释

单条共享元素转场在性能面板上合格,并不代表列表 20 行同时入场时仍然合格。开销是叠加的,评估却常按单条做。同时触发把每帧的布局、上传和填充乘上条数,预算按一条量刚好的运动,在并发时集体掉帧。这和把多段依次播完拉长等待不同:那里加的是墙钟,这里加的是同一帧里的工作量。

机制

每一条运动都要在这一帧求值。N 条变换或许仍能留在合成器,但 N 条模糊、N 条阴影、N 次从脚本读布局,会把主线程和 GPU 一起打满。交错入场的本意是时间错开,若错开间隔小于一帧,对 GPU 来说仍是同一帧的 N 份工作。列表回收再叠上来,可见行都在动时,节点数本身就在涨。

单条评估的盲区是场景组合:导航转场 + 列表入场 + 按钮微弹簧 + 滚动惯性,四条各自「很轻」,峰值落在同一 16 毫秒里。性能预算若不按峰值场景算,上线后的卡都出现在组合里。

边界

  • 真正错开到稳定之后再启动下一条,峰值可以接近单条;要看错开是否大于稳定时间,而不是设计稿上的 20 毫秒。
  • 合成器能合并的同类变换,叠加比布局动画更线性、更可预测,但仍有层数上限。
  • 减弱或低端降级会把并发条数直接砍掉,这是并发问题的正当解,不是另做一套更短的 N 条。

怎么落地

  • 在真实峰值场景里测:打开页的那一帧同时有什么在动,按这一帧的帧时间接受或拒绝,不按孤立 demo。
  • 限制同时处于飞行中的运动条数;列表入场用少数层而不是每行一条独立动画。
  • 验证:性能面板里单独播共享元素是绿的,再打开「带列表的整页进入」。整页变红,单条评估就失效了。

延伸

  • 同组F7.12.1 动效计算与渲染占用的资源可能挤占主线程导致卡顿 · F7.12.2 掉帧的动效比没有动效更损害体验,因为暴露了系统吃力 · F7.12.3 复杂动效在低端设备上需要降级或关闭而非等比缩放
  • 相邻F7.10.1 动效叠加会延长总等待时间 · R3.04 性能预算
  • 站内检索simultaneous animations · frame budget · jank

同组卡片

快捷操作

分享

分享当前页面

ios_share

https://hci.top/zh/handbook/F7.12.4