🕸️ 第七章 Web网站的创建
📄 一句话概括

JPEG 管照片、PNG 管透明与截图、GIF 只剩小动图;今天的新默认是 WebP,追求极限再上 AVIF。

📝 本节和前面几节的关系

7-9 讲完了设备适配,这一节落到最占流量的资源:图片。教材 7-10 的并列关键词是【JPEG、PNG、GIF】——三种老格式各有各的适用面,加上 SVG,就够覆盖几乎全部场景。

一、三种老格式,各有各的活

格式 压缩方式 透明 动画 最适合
JPEG 有损 不支持 不支持 照片、色彩丰富的大图
PNG 无损 支持 不支持 截图、图标、线稿
GIF 无损 256 色 支持 支持 老旧的小动图
WebP 有损 / 无损 支持 支持 通用替代,体积更小
AVIF 有损 支持 支持 同画质体积最小
SVG 矢量 支持 支持 图标、标志、图表

判断的逻辑很简单:有丰富的颜色渐变(照片)用 JPEG;有清晰边缘和纯色块(截图、图标)用 PNG;要透明也用 PNG。

GIF 现在的地位很尴尬:256 色、体积大、画质差,唯一的优点是到处都能播。同为动图,WebP 和 AVIF 体积小得多——今天继续用 GIF,多半是历史包袱。

SVG 则完全是另一类:它存的是【画法】而不是【像素】。所以放多大都不糊,而且能用 CSS 改色——图标、logo、图表首选它。代价是照片不能用它。

二、今天该用什么

看网页上的实际使用情况(W3Techs,2026 年 9 月):

格式 网站使用率
PNG 75.4%
JPEG 69.3%
SVG 68.0%
WebP 22.4%
GIF 13.4%

前三名差距不大,是因为很多站同时用好几种格式。 值得看的是方向:WebP、SVG、AVIF 是涨得最快的三个,GIF 和 JPEG 在慢慢退。

体积上的账:同样一张图,WebP 比 JPEG 小约 35%;AVIF 在复杂画面上最多能小 60%。代价是编码更慢、老设备可能不认。

所以实践上的顺序是:默认上 WebP,用 picture 包一层保留 JPEG 或 PNG 兜底,对流量敏感的大图再考虑 AVIF。 这样新浏览器拿小的,老浏览器也不至于看不到图。

三、两条纪律:按显示尺寸切图、为高分屏备 2 倍图

图片优化的收益,一大半来自【不传用不上的像素】。

第一条:布局里显示多宽,就切多宽的图。 一个在页面上显示 800 像素宽的图,不要上传 6000 像素的原图——多出来的像素用户看不见,但每一个都要下载。

第二条:为高分屏准备 2 倍图,用 srcset 交给浏览器自己挑。 在 img 标签里列出 1 倍和 2 倍两个文件,浏览器会按设备像素比和网络状况选一个。这样既不浪费流量,也不在高分屏上糊掉。

回到 7-3 那句【内容是网站的本体】——图片是内容里最重的一块,把图压好,往往比优化代码见效快得多。

四、动手 Demo:同一张图,换格式能省多少

用一张 100 KB 的 JPEG 做基准,把换格式的收益算出来。

size = 100   # KB
print("  100 KB 的 JPEG -> WebP %.0f KB" % (size * 0.65))
print("  再转 AVIF -> %.0f KB" % (size * 0.65 * 0.4))
print("  页面 20 张图,合计省 %.1f MB" % (20 * size * 0.35 / 1024))

实跑输出:

--------------------------------------------------------------------
图像格式——一张图该怎么存
--------------------------------------------------------------------
  先看现在网页上都在用什么格式(W3Techs,2026-09-01):

  格式     网站使用率
  --------------------
  PNG      75.4%
  JPEG     69.3%
  SVG      68.0%
  WebP     22.4%
  GIF      13.4%
  --------------------
  三者差距不大是因为很多站同时用好几套格式。
  值得看的是增长方向:WebP、SVG、AVIF 是涨得最快的三个,
  GIF 和 JPEG 在慢慢退。

  每种格式各有各的活:

  格式     压缩方式        透明       动画       最适合
  --------------------------------------------------------------------
  JPEG     有损            不支持     不支持     照片、色彩丰富的大图
  PNG      无损            支持       不支持     截图、图标、线稿
  GIF      无损 256 色     支持       支持       老旧的小动图
  WebP     有损 / 无损     支持       支持       通用替代,体积更小
  AVIF     有损            支持       支持       同画质体积最小
  SVG      矢量            支持       支持       图标、标志、图表
  --------------------------------------------------------------------
  体积上的账:同样一张图,WebP 比 JPEG 小约 35%;
  AVIF 在复杂画面上最多能小 60%。代价是编码更慢,
  老设备可能不认——所以要用【picture】包一层做降级。

  落到具体动作,一张图只需要问三个问题:

  是什么图         存成什么
  ----------------------------------------------
  照片、实拍       JPEG 或 WebP(优先 WebP)
  要透明背景       PNG 或 WebP
  图标、标志       SVG(矢量,放大不糊)
  短动画、动图     WebP 或 AVIF;长了就改用视频
  ----------------------------------------------
  最后两条纪律:别再上传 6000 像素的原图(布局里显示多宽就切多宽),
  并为高分屏准备 2 倍图,用 srcset 交给浏览器自己挑。

看第一行:100 KB 的 JPEG 换成 WebP 只要 65 KB——同一张图、肉眼几乎看不出差别。 看第三行:20 张图就省下约 0.7 MB。在手机弱网下,这 0.7 MB 常常就是【打开还是关掉】的差别。 但别只盯着格式:把 6000 像素的原图换成 800 像素的,省下来的是几十倍,比换编码格式管用得多。 先做尺寸,再挑格式。 最后回到那张表:GIF 只有 13.4%——它正在被 WebP 和视频取代。新做的动图,直接用 WebP 或短 MP4。

30 秒实验

  1. 找一张你网站上的照片,把它从 JPEG 转成 WebP,比较文件大小。
  2. 把一个图标从 PNG 换成 SVG,然后把它放大到很大,看边缘是否还清晰。
  3. 数一数你家网站首页一共多少张图,估算一下总体积。

常见误区

  1. 错误:PNG 比 JPEG 清晰,所以都用 PNG。——纠正:PNG 是无损,但体积常常是 JPEG 的几倍。 照片用 PNG,等于用三倍流量换几乎看不出的提升。
  2. 错误:SVG 是【矢量版 PNG】,所有图都能用。——纠正:SVG 只能画几何图形,存不了照片——照片是几百万个像素,用矢量描述会大到离谱。
  3. 错误:格式越新越好,直接全换 AVIF。——纠正:AVIF 编码慢、老设备不支持。 稳妥做法是 WebP 打底 + picture 兜底,AVIF 只用在最重的那几张图上。
自测三问(点开对答案) 1. 照片、截图、图标分别该用什么格式? —— **照片用 JPEG 或 WebP**(色彩渐变多、有损压缩最划算);**截图用 PNG 或 WebP**(边缘清晰、可能需要透明);**图标和 logo 用 SVG**(矢量、放大不糊、能用 CSS 改色)。 2. GIF 现在为什么不推荐继续用? —— 因为它 **256 色、体积大、画质差**。**同为动图,WebP 和 AVIF 的体积小得多**;**再长一点,直接用视频更合适。** 3. 图片优化的第一步该做什么? —— **先按显示尺寸切图。** 显示 800 像素就不要传 6000 像素的原图——**这一步省下的体积,比换任何编码格式都多。**

相关笔记