Advanced React Performance Optimization Techniques
2 min read
Advanced React Performance Optimization Techniques
Performance optimization is crucial for building smooth, responsive React applications. Let's explore advanced techniques to make your React apps faster.
Code Splitting
Use dynamic imports to split your code:
import { lazy, Suspense } from 'react';
const HeavyComponent = lazy(() => import('./HeavyComponent'));
function App() {
return (
<Suspense fallback={<Loading />}>
<HeavyComponent />
</Suspense>
);
}
Memoization
Use useMemo
and useCallback
effectively:
function ExpensiveComponent({ data, onUpdate }) {
// Memoize expensive calculations
const processedData = useMemo(() => {
return data.map(item => expensiveOperation(item));
}, [data]);
// Memoize callbacks
const handleUpdate = useCallback(() => {
onUpdate(processedData);
}, [onUpdate, processedData]);
return (
<div>
{processedData.map(item => (
<Item key={item.id} data={item} onUpdate={handleUpdate} />
))}
</div>
);
}
Virtual List
Implement virtual scrolling for long lists:
function VirtualList({ items }) {
const [visibleRange, setVisibleRange] = useState({ start: 0, end: 50 });
const visibleItems = items.slice(visibleRange.start, visibleRange.end);
return (
<div onScroll={handleScroll}>
{visibleItems.map(item => (
<ListItem key={item.id} data={item} />
))}
</div>
);
}
State Management Optimization
Optimize Redux or other state management:
// Bad: Re-renders all items
function ItemList({ items }) {
return (
<div>
{items.map(item => (
<Item key={item.id} {...item} />
))}
</div>
);
}
// Good: Only re-renders changed items
function ItemList({ itemIds }) {
return (
<div>
{itemIds.map(id => (
<ConnectedItem key={id} id={id} />
))}
</div>
);
}
Image Optimization
Optimize images and implement lazy loading:
function Gallery() {
return (
<div>
{images.map(image => (
<img
key={image.id}
src={image.src}
loading="lazy"
srcSet={`${image.src} 1x, ${image.src2x} 2x`}
sizes="(max-width: 800px) 100vw, 800px"
alt={image.alt}
/>
))}
</div>
);
}
Web Vitals Monitoring
Monitor performance metrics:
function reportWebVitals(metric) {
if (metric.name === 'FCP') {
console.log('First Contentful Paint:', metric.value);
}
if (metric.name === 'LCP') {
console.log('Largest Contentful Paint:', metric.value);
}
if (metric.name === 'CLS') {
console.log('Cumulative Layout Shift:', metric.value);
}
}
Best Practices
- Use production builds
- Implement code splitting
- Optimize images and assets
- Use proper memoization
- Monitor performance metrics
- Implement proper error boundaries
Conclusion
Performance optimization is an ongoing process. Start with the basics, measure your application's performance, and gradually implement these advanced techniques where they make the most impact.