为什么开发者需要关注图片压缩
图片是网站性能优化的核心环节,对开发者而言:
- 提升用户体验和留存率
- 降低服务器带宽成本
- 改善SEO排名(Core Web Vitals)
- 提升移动端性能
前端优化策略
1. 使用响应式图片
<picture>
<source media="(min-width: 1200px)" srcset="large.webp">
<source media="(min-width: 768px)" srcset="medium.webp">
<source srcset="small.webp">
<img src="fallback.jpg" loading="lazy" alt="描述">
</picture>2. 懒加载实现
<img
src="placeholder.jpg"
data-src="image.jpg"
loading="lazy"
alt="描述"
>3. 优先级提示
<img fetchpriority="high" src="hero.jpg" alt="首屏图片">后端处理方案
Sharp (Node.js)
const sharp = require('sharp');
// 压缩为WebP
await sharp(input)
.webp({ quality: 75 })
.toFile('output.webp');
// 生成多种尺寸
const sizes = [400, 800, 1200];
await Promise.all(
sizes.map(size =>
sharp(input)
.resize(size)
.webp({ quality: 75 })
.toFile(`image-${size}.webp`)
)
);Pillow (Python)
from PIL import Image
# 压缩图片
img = Image.open('input.jpg')
img.save('output.jpg', quality=75, optimize=True)
# 转换为WebP
img.save('output.webp', quality=75)CDN配置优化
使用CDN的自动压缩
- Cloudflare Image Resizing
- AWS CloudFront + Lambda@Edge
- 阿里云OSS图片处理
- 腾讯云COS图片处理
配置示例
// 阿里云OSS图片处理参数
const imageUrl = 'https://bucket.oss.com/image.jpg?x-oss-process=image/format,webp/quality,Q_75';自动化工作流
Webpack配置
// image-webpack-loader
module.exports = {
module: {
rules: [
{
test: /\.(png|jpe?g|gif|webp)$/i,
use: [
{
loader: 'file-loader',
},
{
loader: 'image-webpack-loader',
options: {
webp: {
quality: 75,
},
},
},
],
},
],
},
};Next.js优化
import Image from 'next/image';
// Next.js自动优化图片
<Image
src="/hero.jpg"
alt="描述"
width={1200}
height={600}
priority // 首屏图片
placeholder="blur"
/>性能监控
关键指标
- LCP (Largest Contentful Paint) < 2.5s
- CLS (Cumulative Layout Shift) < 0.1
- FID (First Input Delay) < 100ms
- Lighthouse分数 > 90
工具推荐
- Lighthouse:综合性能测试
- WebPageTest:详细性能分析
- PageSpeed Insights:Google官方工具
- Chrome DevTools:实时性能监控