react-use-optimized-image
Version:
A React hook for image optimization (format detection, lazy loading, caching, CDN support)
150 lines (108 loc) ⢠3.68 kB
Markdown
# š React Use Optimized Image
A smart **image optimization hook** for React that improves performance by **auto-detecting formats, lazy loading, caching, and optimizing based on network speed**. šÆ



---
## š¦ **Installation**
```sh
npm install react-use-optimized-image
# or
yarn add react-use-optimized-image
```
## š **Features & Benefits**
### ā
**Automatic Format Detection**
- Uses **WebP / AVIF** for supported browsers for better compression.
- Falls back to **JPEG / PNG** for older browsers.
- Saves bandwidth & improves **Core Web Vitals (LCP, FCP).**
### š **Lazy Loading for Faster Performance**
- Uses **`IntersectionObserver`** to load images only when visible.
- Reduces **initial page load time** and improves SEO.
### š¾ **Smart Caching with Local Storage**
- Stores **optimized image URLs** in `localStorage` for **instant reloads**.
- Reduces **redundant requests**, making browsing faster.
### ā” **Network Speed Adaptation**
- Uses **`navigator.connection.effectiveType`** to adjust image quality:
- **Fast network** ā Loads high-resolution images.
- **Slow network (2G/3G)** ā Loads compressed images to improve speed.
### š **CDN Support for Global Access**
- Supports **Cloudinary, Imgix, and other CDNs**.
- Ensures **faster load times** for users worldwide.
### š§ **Developer-Friendly API**
- Simple **React hook-based API** with **TypeScript support**.
- Fully customizable with **format, quality, and lazy load options**.
---
# š Usage Examples (JSX)
## š Basic JSX Example
```jsx
import React from "react";
import { useOptimizedImage } from "react-use-optimized-image";
const ImageComponent = () => {
const { optimizedSrc, isLoading, imgRef } = useOptimizedImage({
src: "https://example.com/image.jpg",
lazy: true,
});
return (
<div>
{isLoading ? (
<p>Loading...</p>
) : (
<img ref={imgRef} src={optimizedSrc} alt="Optimized" />
)}
</div>
);
};
export default ImageComponent;
```
## š TypeScript Example with Custom Props
```tsx
import React from "react";
import { useOptimizedImage } from "react-use-optimized-image";
interface ImageProps {
src: string;
alt: string;
quality?: number;
}
const OptimizedImage: React.FC<ImageProps> = ({ src, alt, quality = 80 }) => {
const { optimizedSrc, isLoading, imgRef } = useOptimizedImage({
src,
quality,
});
return (
<div>
{isLoading ? (
<p>Loading...</p>
) : (
<img ref={imgRef} src={optimizedSrc!} alt={alt} />
)}
</div>
);
};
export default OptimizedImage;
```
# š„ Advanced Use Cases
## 1ļøā£ Optimizing Images with CDN
```jsx
const { optimizedSrc } = useOptimizedImage({
src: "https://res.cloudinary.com/demo/image/upload/sample.jpg",
quality: 80,
cdn: "cloudinary",
});
```
ā
Automatically formats URL for better compression & performance.
## 2ļøā£ Caching for Faster Reloads
```jsx
const { optimizedSrc } = useOptimizedImage({
src: "https://example.com/image.jpg",
cache: true,
});
```
ā
Minimizes redundant API calls, reducing server load.
## 3ļøā£ Adaptive Quality Based on Network Speed
```jsx
const { optimizedSrc } = useOptimizedImage({
src: "https://example.com/image.jpg",
adjustForNetwork: true,
});
```
ā
Ensures fast loading for all users, even on mobile networks.