animation-performance
1
总安装量
1
周安装量
#41161
全站排名
安装命令
npx skills add https://github.com/sovranbitcoin/sovran --skill animation-performance
Skill 文档
Animation Performance Tips
Overview
Performance optimization guide for React Native Reanimated animations, covering shared values, worklets, memoization, and rendering optimizations. These guidelines ensure buttery smooth animations at 60fps.
When to Apply
Reference these guidelines when:
- Debugging janky or stuttering animations
- Optimizing animation performance (FPS drops)
- Working with shared values and worklets
- Implementing gesture handlers
- Optimizing animated lists and scroll handlers
- Reviewing Reanimated code for performance issues
Priority-Ordered Guidelines
| Priority | Category | Impact | Prefix |
|---|---|---|---|
| 1 | Shared Values Usage | CRITICAL | shared-values-* |
| 2 | Re-renders | CRITICAL | re-renders-* |
| 3 | Memoization | HIGH | memoization-* |
| 4 | Animation Calculations | HIGH | calculations-* |
| 5 | Layout vs Transform | HIGH | layout-* |
| 6 | Reactions | HIGH | reactions-* |
| 7 | Hooks Selection | HIGH | hooks-* |
| 8 | Animation Lifecycle | MEDIUM | animations-* |
| 9 | Component Limits | MEDIUM | limits-* |
| 10 | Scroll Optimization | MEDIUM | scroll-* |
Quick Reference
Critical: Shared Values Usage
Common mistakes:
- Reading shared values on JS thread (causes thread blocking)
- Accessing shared values during render (violates Rules of React)
- Using component state for animation values (triggers re-renders)
Quick fixes:
- Read shared values only in worklets (
useAnimatedStyle,useDerivedValue) – seeshared-values-read-in-worklets.md - Access shared values in
useEffector callbacks, not during render – seeshared-values-during-render.md - Use
useSharedValueinstead ofuseStatefor animation values – seere-renders-use-shared-values.md - Track animation state with
useRefinstead of reading shared values – seeshared-values-track-state-with-ref.md - Initialize with simple values, compute complex ones in worklets – see
shared-values-initialization.md
Critical: Re-renders
Common fixes:
- Use shared values instead of component state for animations
- Memoize animation objects outside component or with constants
- Memoize frame callbacks with
useCallback - Memoize gesture objects with
useMemo
High: Animation Calculations
Common fixes:
- Use
useDerivedValuefor expensive calculations – seecalculations-use-derived-value.md - Avoid conditional logic in worklets – see
calculations-avoid-conditionals.md - Use
clampinstead of manual Math.min/max – seecalculations-use-clamp.md - Batch updates with
scheduleOnUI– seecalculations-batch-with-schedule-on-ui.md - Prefer transform properties over layout properties – see
layout-prefer-transform.md - Choose the right hook (
useAnimatedPropsvsuseAnimatedStyle) – seehooks-choose-animated-props.md - Optimize
useAnimatedReactiondependencies – seereactions-optimize-dependencies.md - Cancel animations properly before starting new ones – see
animations-cancel-properly.md
References
Full documentation with code examples in references/:
Shared Values (shared-values-*)
| File | Impact | Description |
|---|---|---|
shared-values-read-in-worklets.md |
CRITICAL | Read shared values only in worklets, not on JS thread |
shared-values-during-render.md |
CRITICAL | Don’t read/modify shared values during render |
shared-values-track-state-with-ref.md |
HIGH | Track animation state with useRef instead of reading shared values |
shared-values-initialization.md |
HIGH | Avoid expensive initial values, use simple primitives |
Re-renders (re-renders-*)
| File | Impact | Description |
|---|---|---|
re-renders-use-shared-values.md |
CRITICAL | Use shared values instead of component state for animations |
Memoization (memoization-*)
| File | Impact | Description |
|---|---|---|
memoization-animations.md |
HIGH | Memoize animation objects to prevent recreation |
memoization-frame-callbacks.md |
HIGH | Memoize frame callbacks with useCallback |
memoization-gesture-objects.md |
HIGH | Memoize gesture objects with useMemo |
Calculations (calculations-*)
| File | Impact | Description |
|---|---|---|
calculations-use-derived-value.md |
HIGH | Use useDerivedValue to optimize useAnimatedStyle calculations |
calculations-avoid-conditionals.md |
HIGH | Minimize conditional logic in worklets, use useDerivedValue |
calculations-use-clamp.md |
HIGH | Use clamp instead of manual Math.min/max in worklets |
calculations-batch-with-schedule-on-ui.md |
HIGH | Batch shared value updates with scheduleOnUI |
Layout (layout-*)
| File | Impact | Description |
|---|---|---|
layout-prefer-transform.md |
HIGH | Prefer transform over layout properties |
Reactions (reactions-*)
| File | Impact | Description |
|---|---|---|
reactions-optimize-dependencies.md |
HIGH | Avoid unnecessary reactions, optimize dependency tracking |
Hooks (hooks-*)
| File | Impact | Description |
|---|---|---|
hooks-choose-animated-props.md |
HIGH | Choose useAnimatedProps vs useAnimatedStyle correctly |
Animations (animations-*)
| File | Impact | Description |
|---|---|---|
animations-cancel-properly.md |
MEDIUM | Cancel running animations before starting new ones |
Limits (limits-*)
| File | Impact | Description |
|---|---|---|
limits-animated-components.md |
MEDIUM | Limit number of simultaneously animated components |
Scroll (scroll-*)
| File | Impact | Description |
|---|---|---|
scroll-handlers-throttle.md |
MEDIUM | Optimize scroll handlers with throttling |
Problem â Skill Mapping
| Problem | Start With |
|---|---|
| Animation feels janky/stuttering | shared-values-read-in-worklets.md â re-renders-use-shared-values.md |
| Reading shared value to determine toggle state | shared-values-track-state-with-ref.md |
| Too many re-renders during animation | re-renders-use-shared-values.md â memoization-animations.md |
| Expensive calculations every frame | calculations-use-derived-value.md â calculations-avoid-conditionals.md |
| Conditional logic in worklets causing jank | calculations-avoid-conditionals.md |
| Layout animations are slow | layout-prefer-transform.md |
| Multiple shared value updates cause jank | calculations-batch-with-schedule-on-ui.md |
| Clamping values inefficiently | calculations-use-clamp.md |
| Frame callback performance issues | memoization-frame-callbacks.md |
| Gesture handler reattaches frequently | memoization-gesture-objects.md |
| useAnimatedReaction causing performance issues | reactions-optimize-dependencies.md |
| Wrong hook choice (useAnimatedProps vs useAnimatedStyle) | hooks-choose-animated-props.md |
| Animations conflicting or not canceling | animations-cancel-properly.md |
| Shared value initialization is expensive | shared-values-initialization.md |
| Too many animated components | limits-animated-components.md |
| Scroll handler causes performance issues | scroll-handlers-throttle.md |