1、通過 Google Chrome 開啟需要進行效能優化的站點
2、開啟 Chrome 開發者工具 Lighthouse 面板
3、在 Lighthouse 面板中根據自己的需求自定義分析項和分析設定
4、完成分析項和分析設定自定義後,點選」分析網頁載入情況「對頁面進行效能等方面的分析,分析完成後如圖所示:
上圖中展示了六個主要效能指標的資料,通過這些指標對頁面的效能進行評分。上圖中效能評分只有 36 分,因此該站點存在嚴重的效能問題。
六個主要指標的說明(可通過指標資料區域右上角的展開檢視檢視簡要指標說明):
1、First Contentful Paint(FCP):首次內容渲染時間標記了渲染出首個文字或首張圖片的時間。
這個表格展示瞭如何解讀 FCP 得分:
這個表格展示瞭如何解讀 TTI 得分:
這張表展示瞭如何解讀行動端的 Speed Index 得分:
4、Total Blocking Time(TBT):首次內容渲染 (FCP) 和可互動時間之間的所有時間段的總和,當任務用時超過 50 毫秒時,該數值以毫秒錶示。
5、Largest Contentful Paint(LCP):Largest Contentful Paint 標記了渲染出最大文字或圖片的時間。
6、Cumulative Layout Shift(CLS):「累積佈局偏移」旨在衡量可見元素在視口內的移動情況。
Lighthouse 工具通過對頁面的分析,影響頁面效能的主要有存在未使用的 JavaScript、文字壓縮未啟用、網路負載過大、快取策略等問題,如圖所示:
從上圖可以看出,對站點效能影響最大的是存在未使用的 JavaScript,其次是文字壓縮未啟用,本文主要分析文字壓縮問題對效能的影響。
如圖可知,分析工具給出針對未啟用文字壓縮的具體優化建議是:對於文字資源,應先壓縮(gzip、deflate 或 brotli),然後再提供,以最大限度地減少網路活動消耗的位元組總數。
通過啟用文字壓縮解決前端效能問題的主要措施有:
以 Vue 3 專案和 gzip 壓縮為例:
# 是否啟用 gzip 或 brotli 壓縮
# 選項值: gzip | brotli | none
# 如果需要多個可以使用「,」分隔
VITE_BUILD_COMPRESS = 'gzip'
# 使用壓縮時是否刪除原始檔案,預設為 false
VITE_BUILD_COMPRESS_DELETE_ORIGIN_FILE = false
以 gzip 壓縮為例:
http {
# 開啟 gzip
gzip on;
# 開啟 gzip_static。開啟後可能會報錯,需要安裝相應的 gzip 壓縮模組。只有開啟 gzip_static,前端打包的 .gz 檔案才會有效果
gzip_static on;
# 用於控制哪些響應需要進行 gzip 壓縮
gzip_proxied any;
gzip_min_length 1k;
# 設定用於壓縮響應的記憶體緩衝區的大小和數量
gzip_buffers 4 16k;
# 如果 nginx 中使用了多層代理,必須設定這個才可以開啟 gzip
gzip_http_version 1.0;
gzip_comp_level 2;
gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
gzip_vary off;
gzip_disable "MSIE [1-6]\.";
}
gzip_static 指令用於啟用預壓縮靜態檔案功能。當啟用 gzip_static 指令後,Nginx 會檢查請求的檔案是否存在與同名的 .gz 檔案,如果存在,則直接返回 .gz 檔案,否則才會進行壓縮並返回壓縮後的內容。
gzip_proxied 指令用於控制哪些響應需要進行 gzip 壓縮。當響應滿足指定條件時,將會進行 gzip 壓縮,從而減小響應的大小,提高頁面的載入速度,降低頻寬消耗。
gzip_proxied 的可選設定項有:
這些選項可以單獨使用,也可以組合使用,以逗號分隔。例如,"no-cache, no-store" 表示對不快取和不儲存的響應進行 gzip 壓縮。
需要注意的是,開啟 gzip 壓縮會消耗一定的 CPU 資源,對於 CPU 負載較高的伺服器,應謹慎使用 gzip_proxied 設定項。同時,開啟 gzip 壓縮還可能會導致一些瀏覽器和代理伺服器出現相容性問題,因此應該進行充分的測試和評估。
gzip_buffers 指令用於設定用於壓縮響應的記憶體緩衝區的大小和數量。當啟用 gzip 壓縮時,Nginx 會將響應內容壓縮後傳送給使用者端,而這個過程需要使用記憶體緩衝區來儲存壓縮後的內容,以及壓縮過程中的臨時資料。
gzip_comp_level 指令用於設定壓縮級別(1 ~ 9)。數位越大,壓縮比越高,但是壓縮速度越慢。通常情況下,建議將壓縮級別設定為 5 或 6,以在保證壓縮比的同時,保持較快的壓縮速度。
通過前端程式碼打包時啟用預壓縮靜態檔案功能和Nginx 部署時啟用 gzip 文字壓縮功能的共同處理下,頁面存取效能得到明顯的提升,如圖所示: