1235 字
6 分钟

图片格式的收益边界:PNG → WebP → AVIF 实测

拿自己站上 12 张真实配图做实验:WebP 换 AVIF 在「同画质」下平均省 35%,但常见的「AVIF 省一半」是拿不同质量档比出来的。附 PSNR 对齐方法、编码耗时与什么时候才值得上 AVIF。
10月24日 20:20
建站性能图片

「AVIF 比 WebP 小 50%」这句话在中文技术圈流传很广。我拿自己站上 12 张真实配图做了实验,结论是:同画质下平均省 35%,但如果你按”质量参数相同”去比,AVIF 甚至可能更大。

差异在于怎么定义「同画质」。这篇文章把方法、数据和结论都写清楚。

12 张真实配图:WebP 与 AVIF 在不同质量档下的体积

第一轮:按质量参数比,结论是错的#

最直接的做法是「WebP quality=80 vs AVIF quality=80」。实测下来 AVIF 反而更大(上表 q75 那一列已经能看出趋势,q80 更明显)。

原因很简单:两种编码器的 quality 不是一个标尺。WebP 的 80 与 AVIF 的 80 对应的视觉质量完全不同,直接比体积没有意义。

这一轮唯一有效的结论是:AVIF 的等视觉质量点大概在 q50~q60 附近,而不是 q75+。

第二轮:用 PSNR 对齐画质#

正确做法是先定义「什么算同画质」,再在那个点上比体积。我用 PSNR(峰值信噪比)当判据:

  • 参考图 = 仓库里现成的 WebP(它本身已经是有损压缩过的,作为基准);
  • 对每张图用 AVIF 从 q40 到 q80 逐档编码,算它与参考图的 PSNR;
  • 取第一个 PSNR ≥ 38 dB 的档位 —— 38 dB 大约是「并排看、放大到 100% 也看不出差别」的水平。

用 PSNR 对齐画质后,AVIF 平均省 35%

结果:

图片WebP q80同画质 AVIF节省编码耗时
78 KB 网页截图79.7 KBq50 → 46.1 KB42%138 ms
144 KB 网页截图183.9 KBq60 → 152.1 KB17%146 ms
31 KB 手机截图31.9 KBq50 → 19.1 KB40%167 ms
23 KB 终端截图23.7 KBq50 → 14.4 KB39%58 ms

平均规律:文字/界面类截图省 35%~42%,照片类只省 17% 左右。 这很符合直觉:AVIF 的优势在大面积平滑渐变与照片,而截图里全是锐利的文字边缘,省不出那么多。

编码耗时方面,1400×900 一张图 WebP 约 113 ms、AVIF q60 约 144 ms(1.3 倍)。对构建期批量处理来说完全可以接受。

那为什么我还在用 WebP#

三个理由,按权重排:

1. 收益要看绝对值。 我站上单张图平均 70 KB(51 张 / 3.63 MB),省 35% 就是每张省 25 KB、全站省约 1.2 MB。而文章页一次只加载 3~5 张图 —— 单页实际省下 100 KB 左右。这 100 KB 值得做,但不值得为它牺牲”一套格式、一个脚本”的简单性。

2. 兼容性还差一点。 AVIF 在 Chrome 85+、Firefox 93+、Safari 16.4+ 才支持。2023 年之后的浏览器都没问题,但没有一个通用格式做不到的兜底:老浏览器打开就是空白图。

3. 一部分图是从截图直接来的。 截图(大量锐利文字)恰好是 AVIF 收益最低的一类,而它是我最主要的图源。

什么时候值得上 AVIF#

如果你符合下面两条以上,就该上:

  • 站点图片总量大(几十 MB 以上),或单张图很大(> 500 KB);
  • 图片以照片/插画为主,而不是文字截图;
  • 访客主要在移动网络;
  • 已经有 <picture> 或图片组件,能同时输出两种格式。

写法就是标准的 <picture> 回退:

<picture>
  <source srcset="/img/cover.avif" type="image/avif">
  <source srcset="/img/cover.webp" type="image/webp">
  <img src="/img/cover.jpg" alt="封面" width="1200" height="675" loading="lazy">
</picture>

浏览器会挑它支持的第一个格式,两种都压好、谁支持谁用,这才是不牺牲兼容性的做法。

一个容易被忽略的对比维度#

除了体积,还有两个数字值得一起看:

维度WebPAVIF
同画质体积基准省 17%~42%
编码耗时113 ms144 ms(1.3×)
解码耗时快略慢(移动端更明显)
浏览器支持全平台2023 年后

解码耗时这一项常被忽略:AVIF 的解码比 WebP 重,在低端手机上首屏图片渲染可能反而更慢。省下的字节要能抵过解码代价,才算真的赚。

这些图在页面上的实际观感:压缩率再高,看不清就白搭

小结#

三条可以直接用:

  1. 别按质量参数比:WebP 80 与 AVIF 80 不是同一个东西,要先定义”同画质”(我用 PSNR ≥ 38 dB);
  2. 截图与照片要分开看:截图省 35%~40%,照片只省 15%~20%;
  3. 决定因素是绝对字节数:单页省 100 KB 值得做,但为它引入两套格式、两套脚本,就不一定了。

我目前的结论是:继续用 WebP 单格式,等图片量再涨或者需要面向移动网络时,再切到 <picture> + 双格式。到时候这篇文章里的数字可以直接拿来算收益。

每一步怎么执行写在文章配图流水线里,两篇可以对照着看。

封面图该用多大的图、要不要用随机图接口,见随机图当封面那篇。

这篇文章是否对你有帮助?

发现错误或想要改进这篇文章?

在 GitHub 上编辑此页

文章修订历史 (1 次)

查看变更记录
10月24日 23:18:07 c20be15

docs(baseline): 第 30 轮终检——数字更新到最终状态,补第 28~30 轮小结

图片格式的收益边界:PNG → WebP → AVIF 实测
作者
peroe
发布于
10月24日 20:20
许可协议
CC BY-NC-SA 4.0

相关文章