图片优化策略

中等 🟡性能优化
4 个标签
预计阅读时间:5 分钟
性能优化图片优化WebP响应式图片

图片优化策略

图片是网页中最常见的资源,也是影响页面加载速度的主要因素,合理的图片优化策略可以显著提升性能。

图片格式选择

WebP:

由 Google 开发的现代图片格式
比 JPEG 小 25-35%
支持透明和动画
浏览器支持良好

AVIF:

基于 AV1 视频编码
比 WebP 小 20-30%
支持 HDR 和宽色域
浏览器支持正在增加

JPEG:

适合照片和复杂图像
有损压缩
广泛支持
可调节压缩质量

PNG:

支持透明
无损压缩
适合图标和简单图形
文件体积较大

SVG:

矢量图形
无限缩放
适合图标和简单图形
可通过 CSS 和 JavaScript 操作

图片压缩

有损压缩:

减少文件大小
适当降低质量
肉眼难以察觉差异
适合照片

无损压缩:

移除元数据
优化压缩算法
保持原始质量
适合图标和图形

工具:

ImageOptim
TinyPNG
Squoosh
Sharp (Node.js)
ImageMagick

响应式图片

srcset 属性:

提供多个图片源
浏览器根据设备选择合适的图片
支持不同分辨率
语法:srcset="image-1x.jpg 1x, image-2x.jpg 2x":srcset属性允许在不同像素密度的屏幕上提供不同分辨率的图片,语法格式是"图片URL 像素密度",如1x表示标准像素密度、2x表示Retina屏幕的高像素密度,浏览器会根据设备的像素比自动选择合适的图片,这个属性可以避免在低分辨率设备上加载过大的图片,节省带宽并提高加载速度

sizes 属性:

定义图片在不同视口中的尺寸
与 srcset 配合使用
帮助浏览器选择合适的图片
语法:sizes="(max-width: 600px) 100vw, 50vw":sizes属性与srcset配合使用,用于告诉浏览器在不同视口宽度下图片的显示尺寸,语法是媒体条件加上对应的宽度值,如"(max-width: 600px) 100vw"表示视口宽度不超过600px时图片宽度为100%视口宽度,", 50vw"表示其他情况下图片宽度为50%视口宽度,这个属性帮助浏览器选择最合适的图片分辨率,避免加载过大的图片

picture 元素:

提供多个图片源
基于媒体查询选择
支持不同格式
语法::picture元素允许通过多个source元素为不同场景提供不同的图片源,source元素的media属性指定媒体查询条件,srcset属性指定图片URL,当浏览器匹配到某个source的媒体条件时就会使用该source的图片,如果都不匹配则使用img元素的src作为后备,picture元素常用于艺术方向(不同屏幕宽度显示不同裁剪的图片)或提供不同格式的图片(如WebP、AVIF)

图片加载策略

懒加载:

延迟加载视口外的图片
减少初始加载时间
节省带宽
实现方式:Intersection Observer API:Intersection Observer API是浏览器提供的异步观察元素可见性的API,可以高效地检测元素是否进入或离开视口,相比于传统的scroll事件监听,Intersection Observer不会导致主线程阻塞,性能更好,使用时创建Observer实例并配置rootMargin(视口外延)和threshold(触发阈值),当元素可见性变化时调用回调函数,是实现图片懒加载的首选方案

预加载:

预加载关键图片
提高首屏渲染速度
使用 preload 指令
语法::preload可以用于预加载首屏图片,让浏览器提前开始下载图片资源,as属性指定资源类型为image,href指定图片URL,这样在图片需要显示时可以立即使用缓存或已完成下载的图片,避免加载延迟,preload适合首屏关键图片如hero图片,但不应预加载过多图片以免与关键资源争抢带宽

渐进式加载:

先加载低质量占位图
再加载完整图片
改善用户体验
实现方式:BlurHash、Lqip:BlurHash(模糊哈希)是一种紧凑的占位符编码算法,将图片编码为一个短字符串,在图片加载完成前先显示模糊的占位图,然后平滑过渡到完整图片,提供良好的用户体验,Lqip(Low Quality Image Placeholder)是低质量图片占位符技术,生成非常小的缩略图作为占位图,这两种技术都可以在保证用户体验的同时减少带宽消耗

CDN 与缓存

CDN:

内容分发网络
就近访问图片
提高加载速度
减轻源服务器负担

缓存策略:

设置合理的缓存头
使用 ETag 和 Last-Modified
版本化文件名
利用浏览器缓存

最佳实践

使用现代图片格式(WebP、AVIF)
适当压缩图片
实现响应式图片
懒加载非关键图片
预加载关键图片
使用 CDN 分发图片
合理设置缓存策略
监控图片加载性能
定期优化图片资源