Performance क्यों जरूरी है
In this page:
Optimize करने से पहले Measure करें
Habit से React.memo और useMemo हर जगह sprinkle करना tempting है, लेकिन यह real complexity जोड़ता है और कुछ cases में unnecessarily उपयोग होने पर performance को भी hurt कर सकता है।
React DevTools Profiler आपको एक interaction record करने और exactly देखने देता है कि कौन से components re-render हुए और हर एक ने कितना समय लिया, आपको ACTUAL bottleneck की ओर point करते हुए।
उदाहरण: Measure Before Optimizing
<!DOCTYPE html>
<html>
<head>
<script src="https://unpkg.com/react@18/umd/react.development.js"></script>
<script src="https://unpkg.com/react-dom@18/umd/react-dom.development.js"></script>
<script src="https://unpkg.com/@babel/standalone/babel.min.js"></script>
</head>
<body>
<div id="root"></div>
<script type="text/babel">
function App() {
const [count, setCount] = React.useState(0);
return <button onClick={() => setCount(count + 1)}>Count: {count} (Profile this with React DevTools)</button>;
}
ReactDOM.createRoot(document.getElementById('root')).render(<App />);
</script>
</body>
</html>
Re-rendering vs. Actual DOM Changes
जब एक component re-render होता है, React ज़रूरी नहीं कि actual browser DOM में कुछ भी बदले — यह नए virtual output को previous वाले के against compare (diff) करता है, और सिर्फ specific differences apply करता है।
एक component का frequently re-rendering होना automatically एक performance problem नहीं है अगर involved actual work cheap हो।
उदाहरण: Re-rendering vs. Actual DOM Changes
<!DOCTYPE html>
<html>
<head>
<script src="https://unpkg.com/react@18/umd/react.development.js"></script>
<script src="https://unpkg.com/react-dom@18/umd/react-dom.development.js"></script>
<script src="https://unpkg.com/@babel/standalone/babel.min.js"></script>
</head>
<body>
<div id="root"></div>
<script type="text/babel">
function Cheap({ value }) {
return <span>{value}</span>; // re-rendering this is essentially free
}
function App() {
const [tick, setTick] = React.useState(0);
React.useEffect(() => { const id = setInterval(() => setTick(t => t + 1), 1000); return () => clearInterval(id); }, []);
return <Cheap value={tick} />;
}
ReactDOM.createRoot(document.getElementById('root')).render(<App />);
</script>
</body>
</html>
Slowness के Common, Real Sources
सबसे frequent genuine performance issues हैं: हर render पर repeated expensive calculations (useMemo से fixed), हर render पर recreated functions/objects जो एक child की memoization तोड़ देते हैं (useCallback/useMemo से fixed), और virtualization के बिना बहुत large lists render करना।
उदाहरण: Common, Real Sources of Slowness
<!DOCTYPE html>
<html>
<head>
<script src="https://unpkg.com/react@18/umd/react.development.js"></script>
<script src="https://unpkg.com/react-dom@18/umd/react-dom.development.js"></script>
<script src="https://unpkg.com/@babel/standalone/babel.min.js"></script>
</head>
<body>
<div id="root"></div>
<script type="text/babel">
function App() {
const items = Array.from({ length: 5 }, (_, i) => "Item " + i);
// For huge lists (thousands of items), consider list virtualization
// (a separate technique/library, not covered by useMemo/useCallback alone)
return <ul>{items.map(i => <li key={i}>{i}</li>)}</ul>;
}
ReactDOM.createRoot(document.getElementById('root')).render(<App />);
</script>
</body>
</html>
- Prematurely optimize करना, complexity जोड़ना (memoization हर जगह) actually measure किए बिना कि क्या कोई real performance problem है।
- यह identify करने के लिए React DevTools Profiler उपयोग न करना कि कौन से components actually slow हैं, इसके बजाय guess करना।
- Re-rendering को 'DOM actually change होना' से confuse करना — React किसी component को re-render करना ज़रूरी नहीं कि browser कुछ भी repaint करे, virtual DOM diff की वजह से।
- Performance work को measuring (Profiler के through) से शुरू होना चाहिए, guess करने से नहीं कि कौन से components slow हैं।
- Slowness के common causes: unnecessary re-renders, हर render पर repeated expensive computations, और large unoptimized lists/images।
- React.memo, useMemo, और useCallback specific re-render problems के लिए targeted tools हैं, हर जगह apply करने के लिए एक default नहीं।
- ज़्यादातर apps को aggressive optimization की ज़रूरत नहीं — effort वहां focus करें जहां profiling एक actual, measurable problem दिखाए।
कोई React-version restriction नहीं — React DevTools Profiler किसी भी React 16.5+ app के लिए available है।
Chapter Quiz — Complete all 13 topics to unlock
0/13 topics done
Complete these topics first:
- Why Performance Matters
- Optimizing with React.memo
- Avoiding Unnecessary Re-renders
- Using the React Profiler
- Analyzing Bundle Size
- Image Optimization Techniques
- React as a PWA
- Creating a Production Build
- Environment Variables in React
- Deploying to Netlify
- Deploying to Vercel
- Basic CI/CD for React Apps
- SEO Basics for React SPAs