A smooth, responsive app is essential for a good user experience.
| Metric | Target |
|---|---|
| UI FPS | 60fps |
| JS FPS | 60fps |
| App launch | < 2 seconds |
| Screen transition | < 300ms |
import { FlashList } from '@shopify/flash-list'
;<FlashList
data={items}
renderItem={renderItem}
estimatedItemSize={72}
/>// ✅ Good - only re-renders when balance changes
const balance = useStore(state => state.balance)
// ❌ Bad - re-renders on any store change
const { balance } = useStore()const sorted = useMemo(() => items.sort((a, b) => b.value - a.value), [items])JavaScript thread should stay free. Run animations on the UI thread with Reanimated.
- Enable the Perf Monitor (Cmd+D → Show Perf Monitor)
- Open React DevTools Profiler to find slow components
- Look for unnecessary re-renders
- Console.log in render paths
- Inline styles (create new objects each render)
- Anonymous functions in JSX
- Large objects passed over the bridge
For detailed patterns, see the development workflows.