功能寫完不等於使用者體驗就夠好。載入過慢、動畫卡頓、按鈕點擊延遲,這些都是會在使用者心中悄悄扣分的訊號,第一次造訪的訪客甚至可能直接離開。本章從 Performance 面板的結構談起,後續章節會逐步拆解效能分析的各個面向。
建構視角的對應章節:效能分析工具
兩種主要工具的定位#
開始量化網頁效能時通常有兩個切入點:
- Lighthouse:以網頁體驗指標打分數,並列出可優化的方向,適合作為一般性的快速體檢。
- Performance 面板:用於針對特定功能、互動或網頁遊戲等對每個 function 都需要錙銖必較的場景,提供瀏覽器運作時的完整細節。
開始錄製的兩種方式#
要進入 Performance 面板的測量,常用的起手式有兩種:
- 頁面初始化:先導向
about:blank,按下Record後再前往要測量的網址,可避開任何干擾;或直接點選Start profiling and reload page圖示。 - 針對功能:先按
Record,操作要測量的功能後再停止。
錄製結束後會生成效能報表,需要花一點時間熟悉操作:上下拖曳檢視其他列、左右拖曳移動時間範圍、滾輪縮放時間區間。
上方總覽圖表#
報告最上方的幾列簡明顯示了與效能直接相關的資訊。
FPS#
正常運作時頁面會維持 60 FPS。瀏覽器是單執行緒,必須處理解析、執行、樣式計算與每個像素的繪製,只要單一畫面超過 16ms(1000/60)就會掉幀。
- 綠色方塊:當下的 FPS 變化,FPS 為 0 不代表卡住,可能只是畫面靜止。
- 粉、紅色塊:掉幀提醒,使用者可能會感受到卡頓的區段。
CPU#
以顏色區分執行類型:
| 顏色 | 執行類型 |
|---|---|
| 灰色 | 瀏覽器內部工作 |
| 藍色 | HTML 請求與處理 |
| 黃色 | 事件與 JavaScript 執行 |
| 綠色 | 影像處理與畫面繪製 |
| 紫色 | 樣式計算 |
NET#
藍色區段代表正在進行的請求,可展開下方的 Network 看細節。
截圖#
把游標移到 Frames 列上可以瀏覽特定時間點的畫面,左右移動就像重播一樣,方便鎖定要分析的時間區間。
下方詳細資訊#
點擊任意列的區塊,最下方會展開對應的詳細資訊面板。
Network#
排列各資源的時間與依賴關係,能看到 URL、Duration(傳輸與讀取時間)、Priority、資源大小等資訊。
Frames#
不同於截圖只是定時快照,Frames 顯示哪些時間點產生了新畫面,以及每一幀持續多久,並附上 DPS 與 CPU 相關資訊。
Timings#
每個 Timing 都是貫穿整份報表的時間線:
- First Paint (FP):繪出預設背景色以外任何內容的時刻。
- First Contentful Paint (FCP):繪出文字、圖片或有顏色 Canvas 的時刻。
- DOMContentLoaded (DCL):HTML 載入並解析完畢。
- onload (L):解析完 HTML 後的請求都載入完成。
- Largest Contentful Paint (LCP):繪出頁面最大內容的時刻。
下方還能看到 Total Blocking Time (TBT),代表主執行緒(Main Thread)被阻塞時間的總和。
Experience#
Cumulative Layout Shift (CLS) 顯示頁面元素在載入過程的位移量,越低代表穩定性越好,與 FCP 同為 Core Web Vitals 的一員。
GPU#
呈現瀏覽器運作期間使用 GPU 的部分。在網址列輸入 chrome://gpu 可看到目前哪些功能啟用了硬體加速。
Raster 與 Compositor#
這兩列與畫面顯示緊密相關。瀏覽器更新畫面大致經過:
- JavaScript
- Style
- Layout
- Paint
- Composite
哪些 JavaScript 操作會影響效能、有些動畫為何只需要合成(Composite),會在後續章節詳述。
小結#
Performance 面板把瀏覽器運作的細節攤在開發者眼前。後續章節會把效能議題拆成不同主題,逐一說明如何觀察與分析問題。
原文出處#
- 原書/iThome:https://ithelp.ithome.com.tw/articles/10247709