- 原文地址:Front-End Performance Checklist 2019 — 3
- 原文作者:Vitaly Friedman
- 譯文出自:掘金翻譯計劃
- 本文永久鏈接:https://github.com/xitu/gold-miner/blob/master/TODO1/front-end-performance-checklist-2019-pdf-pages-3.md
- 譯者:Starriers
- 校對者:Jingyuan0000, kikooo
2019 前端性能優化年度總結 — 第三部分
讓 2019 來得更迅速吧~你正在閱讀的是 2019 年前端性能優化年度總結,始於 2016。
目錄
- 資源優化
- 17. 使用 Brotli 或 Zopfli 來對純文本進行壓縮
- 18. 使用響應圖像和 WebP
- 19. 圖像的優化是否得當
- 20. 視頻優化是否得當
- 21. Web 字體優化過了么
資源優化
17. 使用 Brotli 或 Zopfli 來對純文本進行壓縮
2015 年,Google 推出了 Brotli,一種新開源的無損數據格式,現已被所有現代瀏覽器所支持。實際上,Brotli 比 Gzip 和 Deflate 有效得多。因為它比較依賴配置,所以這種壓縮可能會(非常)慢,但較慢的壓縮意味著更高的壓縮率。不過它解壓速度很快。所以你可以考慮 Brotli 為你的網站所節省的成本。
只有用戶通過 HTTPS 訪問站點時,瀏覽器才會接受這種格式。那代價是什麼呢?Brotli 並沒有預安裝在一些伺服器上,所以如果沒有自編譯 Nginx,那麼配置就會相對困難。儘管如此,它也並非是不可攻破的難題,比如,Apache 自 2.4.26 版本起,開始逐步對它進行支持。得益於 Brotli 被眾多廠商支持,許多 CDN 也開始支持它(Akamai、AWS、KeyCDN、Fastly、Cloudlare、CDN77),你甚至(結合 service worker 一起使用)可以在不支持它的 CDN 上,啟用 Brotli。
在最高級別壓縮時,Brotli 會非常緩慢,以至於伺服器在開始發送響應前等待動態壓縮資源所花費的時間,可能會抵消文件大小(被壓縮後)的潛在增益。但對於靜態壓縮,應該首選更高級別的壓縮。
或者,你可以考慮使用將數據編碼為 Deflate、Gzip 和 Zlib 格式的 Zopfli 的壓縮演算法。任何普通的 Gzip 壓縮資源都可以通過 Zopfli 改進的 Deflate 編碼達到比 Zlib 的最大壓縮率小 3% 到 8%的文件大小。問題是壓縮文件大約需要耗費 80 倍的時間。這就是為什麼在資源上使用 Zopfli 是個好主意,因為這些資源不會發生太大的變化,它們被設計成只壓縮一次但可以下載多次。
如果可以降低動態壓縮靜態資源的成本,那麼這種付出是值得的。Brotli 和 Zopfli 都可以用於任意純文本的有效負載 — HTML、CSS、SVG 和 JavaScript 等。
有何對策呢?使用最高級別的 Brotli + Gzip 來預壓縮靜態資源,使用 Brotli 在 1 — 4 級中動態壓縮(動態)HTML。確保伺服器正確處理 Brotli 或 Gzip 的協議內容。如果你在伺服器上無法安裝/維護 Brotli,請使用 Zopfli。
18. 使用響應圖像和 WebP
盡量使用帶有 srcset
、sizes
屬性的響應式圖片和 <picture>
元素響應式圖片。當然,你還可以通過在原生 <picture>
上使用 WebP 圖片以及回退到 JPEG 的機制或者使用協議內容的方式中使用 WebP 格式(在 Chrome、Opera、Firefox 65、Edge 18 中都被支持的格式)(參見 Andreas Bovens 的代碼片段),或者使用協議內容(Accept
頭部)。Ire Aderinokun 也有關於將圖像轉換為 WebP 圖像的超詳細教程。
Sketch 原生地支持 WebP 的,可以使用 Phtotshop 的 WebP 插件從 Photoshop 中導出 WebP 圖像。當然也存在其他可用的選項。如果你正在使用 WordPress 或 Joomla,也可以使用一些擴展來幫助你自己輕鬆實現對 WebP 的支持,比如適用於 WordPress 的 Optimus 和 Cache Enabler,Joomla 當然也存在對應可提供支持的擴展 (通過使用 Cody Arsenault)。
需要注意的是,儘管 WebP 圖像文件大小等價於 Guetzli 和 Zopfli,但它並不支持像 JPEG 這樣的漸進式渲染,這也是用戶以前通過 JPEG 可以更快地看到實際圖像的原因,儘管 WebP 圖像在網路中的傳輸速度更快。使用 JPEG,我們可以將一半甚至四分之一的數據提供給用戶,然後再載入剩餘數據,而不是像 WebP 那樣可能會導致有不完整的圖像。你應該根據自己的需求來進行取捨:使用 WebP,你可以有效減少負載,使用 JPEG,你可以提高性能感知。
在 Smashing Magazine 中,我們使用 -opt
後綴來為圖像命名 — 比如,brotli-compression-opt.png
;這樣,當我們發現圖像包含該後綴時,團隊成員就會明白這個圖像已經被優化過了。— 難以置信!— Jeremy Wagner 出了一本關於 WebP 的書,寫的很好。