Skip to content
All writing Part 03 of 03 · 圖片格式基準測試:WebP 勝出
Engineering · 3 min read

部署 WebP:品質設定、涵蓋率,以及通往 AVIF 的路

每種來源格式一個品質設定、3% 的瀏覽器缺口、零 CDN 異動,以及用 picture fallback 加入 AVIF 的里程碑計畫。

一種品質設定不適用所有來源

我們用兩種品質設定(q80 和 q95)跑完完整的實驗。兩組資料指向同一個結論。用一個全域 q 值不是最好的做法。 原因:同一個 q 對不同來源類型代表不同意義。

有損來源(JPEG、GIF)的細節有限。q95 時編碼器把位元組花在原圖根本沒有的細節上。節省幅度大幅下降,而且大小階梯(自動降級來讓輸出比輸入小的機制)頻繁觸發。

無損來源(PNG)對品質敏感。q95 時節省幅度仍然很大,因為原圖有完整的細節可壓。

數字說明一切:

轉換建議 q大小縮減 (p50)SSIM (p50)原因
JPEG → WebPq8047.1%0.979q95 時節省降到 13.5%。大小階梯在 25 張中觸發 9 次。
GIF → WebPq8051.0%0.980q95 時節省降到 10.7%。大小階梯在 25 張中觸發 10 次。
PNG → WebPq9571.3%0.994q80 時節省升到 82.9% 但 SSIM 降到 0.982。PNG 值得留更高品質。

經驗法則: 有損來源用 q80,無損來源用 q95。在上傳時偵測來源格式,再選品質。

q(品質設定)是編碼器的旋鈕,0 到 100。越高保留越多細節,檔案越大。SSIM(結構相似度)衡量視覺接近程度,0 到 1。0.95 以上多數人看不出差別。

3% 涵蓋率缺口

硬替換代表只送 .webp,沒有 fallback。不支援 WebP 的瀏覽器會顯示破圖。那次曝光就丟了。

誰在 3% 缺口裡(caniuse 全球估計):

  1. IE 11。 2022 年 6 月結束支援,但部分企業環境還在用。
  2. Safari 13 及更舊版本。 2019 年以前的 iOS 和 macOS 裝置。

上線前,先讀自己流量的 user-agent 分佈。你的受眾的真實缺口可以遠低於全球 3%。現在多數廣告流量跑在新版 Chrome 和 Safari 上,WebP 完整支援。

上線要改什麼

改動很小。只有圖片轉換服務需要一個新的匯出分支。

改動範圍 轉換服務 + WebP 匯出 物件儲存 不動 負載平衡器 不動 CDN 節點 不動 CDN 不用改。這是這個方案最大的工程優勢。 綠色 = 改動。灰色 = 不動。
只有轉換服務多一個匯出分支。整條投放路徑維持原樣。

三個步驟:

  1. 在轉換服務加上 WebP 匯出。 目前匯出函式沒有 WebP 或 AVIF 分支,直接 fall through 到 JPEG。加上 WebP 的 case。
  2. libvips 原生支援 animated WebP。 不需要額外工具。(Animated AVIF 需要另一條 ffmpeg 路徑。細節見 Part 01。)
  3. 按來源類型設品質。 JPEG 和 GIF 用 q80。PNG 用 q95。在上傳時偵測來源格式。

CDN、負載平衡器、物件儲存的路由全部不動。.webp 檔案進同一個儲存桶,CDN 送它跟送 .jpg 一模一樣。不用改 CDN 設定,不用改路由規則,不用清快取。

下一步:通往 AVIF 的路

WebP 是里程碑 1(M1)。基準測試的資料支持再走兩步。每一步建立在前一步之上。

路線圖 M1:WebP 硬替換 目前 M2:picture + AVIF Fallback 標記 涵蓋率缺口降到 0 M3:CDN 協商 Accept-header 路由 零標記改動 每個里程碑建立在前一個之上。M1 先上線,因為不需要改 CDN。
M1 先上線因為只改轉換服務。M2 和 M3 需要基礎設施改動。

M2:<picture> fallback + 有條件的 AVIF

<picture> 元素按順序列出格式。瀏覽器選它支援的第一個。

<picture>
  <source srcset="image.avif" type="image/avif">
  <source srcset="image.webp" type="image/webp">
  <img src="image.jpg" alt="...">
</picture>

這個寫法有三個好處:

  1. 涵蓋率缺口降到 0。 每個瀏覽器都拿到它能解碼的格式。
  2. AVIF 只送給支援的裝置。 Chrome 85+、Firefox 93+、Safari 16.4+ 拿更小的 AVIF。其餘拿 WebP 或原始格式。
  3. 不會有破圖。 Fallback 是自動的,使用者看不到。

AVIF 壓得比 WebP 更小(見 Part 02),但解碼成本更高。只送給支援的裝置是穩妥的做法。

M3:CDN 格式協商

CDN 讀瀏覽器的 Accept 標頭,選最好的格式。標記維持一般的 <img> 標籤。CDN 設定用基礎設施即程式碼管理,加上協商規則是一次設定改動。

這是長期最乾淨的方案,但需要 CDN 層級的改動。M1 和 M2 先來。


延伸閱讀: 回到圖片格式基準測試總覽,或讀 Part 01:GIF 轉 Animated WebPPart 02:WebP vs AVIF

參考來源:

Tags #image-optimization #web-performance
// connect

Be brave | Be wise | Be grateful

21 BreakinCode

// elsewhere
LinkedInMedium (lang: en)Youtube
wh:~$William Hung· © 2026 Taipei · GMT+8 · Available for collaboration