Image Optimization की Techniques
In this page:
<img
src="image.jpg"
srcSet="small.jpg 400w, large.jpg 800w"
sizes="(max-width: 600px) 400px, 800px"
width="800"
height="600"
loading="lazy"
alt="Description"
/>
Appropriately-Sized Images Serve करना
एक huge, full-resolution image load करना और इसे CSS के through छोटा display करना फिर भी FULL file size download करता है — browser download को magically shrink नहीं करता।
एक image को इसकी actual display dimensions के close पहले से sized serve करना उन pixels पर bandwidth waste करने से बचता है जो कभी actually दिखाए नहीं जाते।
उदाहरण: Serving Appropriately-Sized Images
<!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 ProductCard() {
return <img src="product-thumb-400w.jpg" width="200" height="200" alt="Product" />;
}
ReactDOM.createRoot(document.getElementById('root')).render(<ProductCard />);
</script>
</body>
</html>
Off-Screen Images Lazy Load करना
Native 'loading="lazy"' attribute browser को बताता है कि एक image download तब तक defer करे जब तक यह view में scroll होने वाली न हो, सब कुछ upfront load करने के बजाय।
यह initial visible viewport के नीचे वाली images के लिए किसी extra library की ज़रूरत न होने वाला एक simple, built-in optimization है।
उदाहरण: Lazy Loading Off-Screen Images
<!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 Gallery() {
const images = ["photo1.jpg", "photo2.jpg", "photo3.jpg"];
return (
<div>
{images.map((src, i) => (
<img key={src} src={src} loading={i === 0 ? "eager" : "lazy"} alt={"Photo " + (i + 1)} width="150" />
))}
</div>
);
}
ReactDOM.createRoot(document.getElementById('root')).render(<Gallery />);
</script>
</body>
</html>
Layout Shift रोकना
बिना explicit width/height के, layout में एक image की space तब तक unknown है जब तक यह load पूरा न हो, जिससे surrounding content हर image pop in होने पर visibly jump करता है।
Width और height (या एक matching aspect-ratio) set करना upfront correct space reserve करता है, layout को stable रखते हुए।
उदाहरण: Preventing Layout Shift
<!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 Article() {
return (
<div>
<p>Some text before the image.</p>
<img src="diagram.jpg" width="400" height="300" alt="Diagram" style={{ display: "block" }} />
<p>Text after — doesn't jump around once width/height are set.</p>
</div>
);
}
ReactDOM.createRoot(document.getElementById('root')).render(<Article />);
</script>
</body>
</html>
- एक full-resolution image serve करना (जैसे एक 4000px-wide photo) जब यह सिर्फ 400px wide display होती है।
- Page में बहुत नीचे वाली images के लिए lazy loading उपयोग न करना, browser को उन्हें download करने के लिए मजबूर करते हुए इससे पहले कि वे कभी दिखें।
- Images पर missing width/height attributes, हर image load होते और content push करते हुए layout shift का कारण बनते।
- Appropriately-sized images serve करना (उनकी actual display size से match करते हुए) wasted bandwidth से बचता है।
- Native loading=lazy attribute user के पास scroll होने तक off-screen images loading defer करता है।
- Explicit width/height (या aspect-ratio) set करना images load होने पर layout shift रोकता है।
- WebP/AVIF जैसे modern formats JPEG/PNG जैसे older formats से same visual quality के लिए बेहतर compression offer करते हैं।
loading=lazy सभी modern browsers में supported है; WebP/AVIF support broad है लेकिन ज़रूरत हो तो बहुत पुराने browsers के लिए हमेशा एक fallback दें।
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