Руководства · 08
Производительность и воспроизведение
Как Animated избегает работы на каждом кадре, как проверить, какой путь использует элемент, и как измерялись цифры на главной странице.
Три пути воспроизведения
Animated выбирает путь для каждого свойства. API от пути не меняется.
| Путь | Когда | Работа за кадр |
|---|---|---|
| browser | Конечное движение transform и opacity на элементах Animated.<tag>, включая пружины | Нет в JavaScript страницы |
| css | Точные кривые, которые браузер может выразить общими CSS keyframes | Нет в JavaScript страницы |
| js | Обычные переменные style, ввод, собственные вычисления и границы последовательностей | Одна запись на значение, без рендера React |
Одно значение, много элементов
Производные от значения хука — выражения calc(). Со scope одна запись переменной за кадр управляет всеми элементами контейнера.
Подготовка примера…
Проверка пути
inspect(element) возвращает драйвер и причину fallback для каждого анимируемого свойства во время реального запуска.
import { inspect } from '@kkwaenggwari/animated';
console.table(inspect(element));
// property driver reason
// transform browser null
// opacity css null
// --level js css-variable-requires-jsСтарт с первого кадра
Когда задача, запускающая движение, занимает главный поток — например, гидратация или большой коммит, — движение перезапускается после окончания этой работы, а не появляется уже продвинутым. Старт на скрытой странице завершается в фоне.
Как измерялись цифры на главной
Каждый сценарий запускался на новой странице после одного прогрева, с тремя записанными замерами; приводится медиана. Время JavaScript — это время внутри колбэков animation frame, пока идёт движение. Оно не включает style, layout и paint, которые браузер выполняет при любом подходе, поэтому это не мера общей нагрузки CPU или частоты кадров.
Воспроизведение браузером не делает layout, paint, compositing и память бесплатными. Измеряйте реальный экран на устройствах, которые вы поддерживаете.
| Сценарий | Условия | Результат |
|---|---|---|
| 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