指南 · 08
性能与播放
Animated 如何避免每帧的工作、如何确认元素走的是哪条路径,以及首页的数据是如何测得的。
三种播放路径
Animated 按属性选择路径。API 不会因路径不同而改变。
| 路径 | 适用情况 | 每帧的工作 |
|---|
| browser | Animated.<tag> 元素上有限的 transform 和 opacity 动效,包括弹簧 | 页面的 JavaScript 不做任何工作 |
| css | 浏览器可以用共享 CSS 关键帧表达的精确曲线 | 页面的 JavaScript 不做任何工作 |
| js | 普通 style 变量、输入、自定义计算以及 sequence 的边界 | 每个值写入一次,没有 React 渲染 |
一个值,多个元素
Hook 值的派生结果都是 calc() 表达式。使用 scope 时,每帧写入一次变量就能驱动容器中的所有元素。
确认路径
inspect(element) 会在实际运行时返回每个动画属性的驱动器和回退原因。
debug.jsimport { inspect } from '@kkwaenggwari/animated';
console.table(inspect(element));
从第一帧开始
如果启动动效的任务让主线程一直忙碌(例如水合或一次大型提交),动效会在那项工作结束后重新开始,而不是看起来已经播到一半。在隐藏的页面中启动的动效会在后台完成。
首页的数据是如何测得的
每个场景都在全新的页面中运行:先预热一次,再记录三次样本,取中位数。JavaScript 时间是动效运行期间在动画帧回调中花费的时间。它不包括样式计算、布局和绘制——这些在任何方案中浏览器都要做——所以它不衡量总 CPU 占用或帧率。
浏览器播放并不会让布局、绘制、合成或内存变得免费。请在你支持的设备上测量真实的界面。
| 场景 | 设置 | 结果 |
|---|
| 400 Animated.div elements move translateX and fade in (timing, 1800 ms) | seed/pose/tempo on Animated.div; 800 browser animations | 0.00 ms |
| One useAnimated value drives 10,000 elements in ordinary style (loop, 1200 ms) | transform and opacity as calc() of one CSS variable written on a scope element | 0.13 ms |
2026-09-28 · Chrome 153.0.8010.52 (headless) · Windows_NT x64 · Intel(R) Core(TM) i7-14700K