图片优化是交付问题,不是一条压缩命令。正确的输出取决于图片内容、实际渲染尺寸、设备像素比、网络、解码器、色彩要求、无障碍需求,以及图片是否是页面的最大内容绘制(LCP)元素。文件更小并不一定代表回归减少:如果图片模糊、解码成本过高、请求优先级错误或尺寸不匹配,用户体验仍可能变差。

核心要点

  • 从真实显示插槽出发生成衍生尺寸,不要把大型主图发送给所有设备。
  • 按内容类型和交付约束选择格式。JPEG、PNG、WebP、AVIF、SVG、GIF 与视频有不同的失败模式。
  • 不要懒加载可能成为 LCP 的首屏图片;应预留布局空间、明确请求优先级,并只对非关键的首屏下内容懒加载。
  • srcsetsizes<picture> 明确候选图与艺术指导;回退格式也必须适用于浏览器之外的客户端。
  • 在代表性设备上比较字节数、视觉质量、解码时间、LCP、CLS 和长任务行为。质量数字不是通用标准。
  • 把无障碍、色彩配置、授权、EXIF 隐私和源文件溯源纳入流水线,而不是事后补救。

“优化”到底意味着什么

优化后的图片应满足明确的视觉和交付预算。预算可能包括最大字节数、最低感知质量、目标解码时间、色彩策略、无障碍要求,以及缓存或留存政策。没有注明样本集、编码器、参数、基线、设备、网络和测量方法,就不能声称固定百分比的通用收益。

性能数据也需要上下文。Core Web Vitals 面向真实用户体验分布,不是保证每个页面或图片都在某个固定时间内完成加载的承诺。实验室工具适合定位问题,真实用户监测则用于理解不同设备、网络和版本的分布及回归。

先从实际渲染插槽开始

源文件尺寸应根据最大的有效渲染插槽决定,而不是默认沿用相机或设计导出的尺寸。例如,插槽宽度为 640 CSS 像素、设备像素比为 2 时,接近 1280 物理像素的候选图可能合理;这不是所有视口或缩放场景的规则。

应记录:

  • 渲染宽高,以及艺术指导导致的宽高比变化;
  • 设备像素比候选和有意义的最大分辨率;
  • 裁剪与主体焦点策略;
  • 图片是内容、装饰还是交互控件;
  • 色彩空间、透明度、动画和文字可读性要求。

设置 widthheight,或等效的 aspect-ratio,让浏览器在图片到达前预留空间。这可以减少布局偏移,但不能让尺寸错误或裁剪错误的资源变得合理。

按内容选择格式

内容与约束 可考虑的方案 必须验证
照片和渐变 JPEG、WebP 或 AVIF 衍生版本 纹理、振铃、色度伪影、字节数、解码成本
截图、界面和锐利文字 PNG 或经过测试的无损/近无损格式 边缘、文字、Alpha、文件大小
标志、图标和简单插图 源文件可信时使用 SVG,否则生成栅格衍生图 清洗、字体、滤镜、固有尺寸
短动画 按客户端选择动画 WebP/AVIF、APNG、GIF 或视频 循环、时序、无障碍、CPU 与内存
印刷或归档交换 TIFF 或工作流要求的主文件格式 色彩配置、位深、元数据、下游软件

WebP 和 AVIF 不保证固定的体积下降。应在相同尺寸和可比视觉目标下与当前基线比较。还要为编辑、下载、爬虫和浏览器矩阵之外的客户端保留回退。不要把不可信 SVG 当作普通静态数据,它是需要清洗和隔离的主动 XML。

压缩与避免虚假精确

有损编码会丢弃信息,无损编码只保证保留它收到的像素。两者都不能抵消此前的缩放、色彩转换或有损编码。应从适合编辑的源文件生成交付衍生图,避免反复重新编码交付 JPEG。

质量数值是编码器特定的控制参数。某个库中的 80 不是可跨工具迁移的视觉质量承诺。对每种内容建立少量候选,然后比较:

  1. 实际显示尺寸下的感知缺陷,包括文字和人脸;
  2. 压缩字节数和传输时间;
  3. 代表性硬件上的解码与栅格化成本;
  4. 色彩、Alpha、动画和元数据行为;
  5. 下游兼容性与缓存影响。

色度子采样可能减少颜色细节,并损伤小文字或高饱和边缘。包含界面文字或线稿时应保留更高色度,再根据结果决定,而不是对所有图片套用 4:2:0

响应式交付与艺术指导

srcset 表达宽度或像素密度候选,sizes 告诉浏览器插槽可能有多宽。sizes 不准确时,浏览器可能选择过大的候选。<picture> 可以选择格式或不同裁剪,但其中的回退 <img> 仍然是语义图片,必须提供有意义的替代文本。

html
<picture>
  <source
    type="image/avif"
    srcset="/img/article-640.avif 640w, /img/article-1280.avif 1280w"
    sizes="(max-width: 720px) 100vw, 720px"
  />
  <source
    type="image/webp"
    srcset="/img/article-640.webp 640w, /img/article-1280.webp 1280w"
    sizes="(max-width: 720px) 100vw, 720px"
  />
  <img
    src="/img/article-1280.jpg"
    srcset="/img/article-640.jpg 640w, /img/article-1280.jpg 1280w"
    sizes="(max-width: 720px) 100vw, 720px"
    width="1280"
    height="720"
    alt="技术人员检查电路板的照片"
  />
</picture>

当主体或裁剪需要随断点变化时才使用艺术指导,不要只是为了重复同一文件。要测试键盘缩放、高像素密度显示、慢网络以及内容变化导致的插槽宽度变化。

加载、解码与请求优先级

原生懒加载只是调度提示,不是保证。对确实位于首屏下方且不是主要任务所需的图片使用 loading="lazy"。不要把它用于可能成为 LCP 的图片,或用于在很短视口下立即可见的图片。

关键首屏图应结合页面布局和框架的优先级机制谨慎处理。fetchpriority="high" 只应在经过测试的窄场景中使用;给大量图片设置高优先级会与 CSS、字体和脚本竞争。decoding="async" 同样是提示,不保证解码永远不会影响响应性。

html
<!-- 关键图片:预留空间,不使用懒加载。 -->
<img
  src="/img/hero-1280.webp"
  width="1280"
  height="720"
  fetchpriority="high"
  alt="机械臂分拣可回收零件的照片"
/>

<!-- 非关键图片:确认位于首屏下方后再懒加载。 -->
<img
  src="/img/related-640.webp"
  width="640"
  height="360"
  loading="lazy"
  decoding="async"
  alt="分拣后材料的特写照片"
/>

不要采用只替换 src、却没有无脚本回退、可靠尺寸、错误处理和取消行为的 JavaScript 懒加载。原生能力通常是更简单的基线,增加观察器前应先测量收益。

缓存、CDN 与构建流水线

图片 CDN 可以调整尺寸、转换格式、协商交付并缓存衍生图,但它不会自动知道正确裁剪、授权、留存或质量目标。应校验转换参数、限制请求尺寸,避免用户控制的 URL 变成 SSRF 或缓存投毒路径。

对于内容寻址且不可变的衍生资源,可以在 URL 随字节变化时使用长期缓存。可变 URL 则需要明确的重新验证和清除策略。记录源版本、转换参数、编码器版本、输出哈希、色彩策略和审核结果,才能复现衍生图。

构建工具也遵循同样原则。需要可复现时固定工具链,让失败可见,并测试元数据清理、方向处理、ICC 配置、Alpha 和动画,而不是让它们被默认行为静默丢弃。

无障碍、色彩与隐私

替代文本描述图片的目的或信息,不会因为更换文件格式而自动生成。装饰图应使用空替代文本,信息图应提供简洁上下文。不要把关键信息只放在压缩位图中,并为必要动画提供静态替代。

应保留源色彩配置,或记录有意进行的转换策略。在色彩管理和非色彩管理显示环境上检查广色域图片。EXIF 可能含有 GPS、拍摄时间、设备标识、方向信息和缩略图;不需要时应在发布前删除敏感元数据,但要记住清理元数据不能让人物、嵌入内容或授权义务消失。

如何测量一次优化实验

不要只用一张有利图片作为样本。应固定或记录:

  • 源文件和内容类型;
  • 编码器与版本、参数以及色彩管理策略;
  • 尺寸、裁剪、质量目标和回退格式;
  • 浏览器/解码器、设备类别、网络配置、缓存状态和并发;
  • 字节数、解码尺寸、LCP、CLS、交互延迟、解码时间和缺陷审核标准等指标。

以基线为对照,每次只改变一个主要变量。报告分布和失败样本,而不是只展示最好的资源。浏览器、编码器、CDN 或内容变化后重新运行。只有当相关用户群体接受了端到端权衡时,图片优化才算成功。

实施清单

  1. 确定图片角色、渲染插槽、裁剪方式和无障碍语义。
  2. 保留适合编辑的源文件,并记录权利和溯源。
  3. 从源文件生成有明确尺寸的衍生图,避免反复有损转换。
  4. 在目标尺寸和代表性解码器上测试格式候选。
  5. 在加载前设置固有尺寸或 aspect-ratio
  6. 只有在选择规则准确时才使用 srcset/sizes<picture>
  7. 让可能成为 LCP 的内容不参与懒加载,并验证请求优先级。
  8. 对确实非关键的内容懒加载,并保留有效回退。
  9. 配置缓存键、清除/重新验证、转换限制和授权。
  10. 检查色彩、Alpha、元数据、动画、替代文本和输出完整性。
  11. 监测真实用户指标,并按设备和连接类型定位回归。

常见问题

WebP 或 AVIF 一定比 JPEG 好吗?

不一定。它们可能在某个样本集上减少字节数,但编码时间、解码成本、色彩行为、编辑支持和回退都会改变判断。应在产品实际服务的尺寸和视觉质量目标下,用代表性衍生图进行比较。

所有图片都应该懒加载吗?

不应该。可能成为 LCP 或首屏立即可见的图片应明确调度,而不是默认延迟。懒加载通常适合首屏下方的非关键内容,但仍需要真实设备测试。

设置 widthheight 会让图片加载更快吗?

它们主要用于预留布局空间、减少 CLS,不会减少传输字节,也不能代替响应式候选。应与正确尺寸、srcsetsizes 和合适的加载优先级一起使用。

80 这样的质量值是标准吗?

不是。它是编码器特定的控制值。不同库和版本可能产生不同的视觉质量、色度处理和文件大小,应通过记录过的对比选择,而不是照抄通用表格。

删除 EXIF 就能让图片私密吗?

不能。它可能删除 GPS 或设备元数据,但像素仍可能暴露人物、地点、文档或嵌入信息。还要检查图片本身、权利、交付端点和留存策略。

一手来源

总结

图片优化是一条受控的交付流水线:根据内容选择表示方式,按实际插槽调整尺寸,按照用户任务安排加载,并在真实客户端验证结果。与此同时保留无障碍、色彩、隐私和溯源信息,通过测量理解权衡。即使格式、浏览器、CDN 和设备能力变化,这套方法仍然成立。