前端性能優化之利用 Chrome Dev Tools 性能分析

2021-03-06 奇舞精選

我們經常使用 Chrome Dev Tools 來開發調試,但是很少知道怎麼利用它來分析頁面性能,這篇文章,我將詳細說明怎樣利用 Chrome Dev Tools 進行頁面性能分析及性能報告數據如何解讀。如果你認真看了本文,一定能學會分析,沒學會,你來找我~


上圖是 Chrome Dev Tools 的一個截圖,其中,我認為能用於進行頁面性能快速分析的主要是圖中圈出來的幾個模塊功能,這裡簡單介紹一下:

Network : 頁面中各種資源請求的情況,這裡能看到資源的名稱、狀態、使用的協議(http1/http2/quic...)、資源類型、資源大小、資源時間線等情況Performance : 頁面各項性能指標的火焰圖,這裡能看到白屏時間、FPS、資源加載時間線、longtask、內存變化曲線等等信息Memory : 可以記錄某個時刻的頁面內存情況,一般用於分析內存洩露JavaScript Profiler : 可以記錄函數的耗時情況,方便找出耗時較多的函數

首先,我們在分析的時候,建議使用隱身模式打開頁面,排除一些插件等因素對頁面性能情況的影響。然後,我們把頁面緩存勾選去掉,要測 disable cache 的情況,再把網絡情況調整一下,我們用電腦打開頁面的時候一般都連著 wifi 等,要更真實一些去測頁面的性能,還是把網絡調到 3G 等情況比較好,如圖:

調整好之後,我們切到 Performance 面板,這裡先說明一下一些按鈕的作用:

上圖,從左到右分別代表的是:

自動重啟頁面,並記錄整個頁面加載的過程。這個是最常用的,一般大概分析頁面性能的時候都是點這個就夠了選擇要展示的性能記錄。你可能進行了多次分析,這裡可以切換去看每次的結果

這裡,我以京東的一個頁面為例,勾選 disable cache,網絡情況為 Fast 3G,點擊2,然後就結果來說明一下,應該如何理解性能結果,找出優化點。

我們先來看看網絡面板,看看都有哪些信息。如下圖所示:

從圖中可以看出,頁面中有的一些性能優化手段有:頁面直出,輸入https://wq.jd.com/wxportal/index_v6 ,頁面加載回來的 document 就是一個渲染好的 html 頁面圖片優化,部署在不同的CDN域名下,用webp/dpg等格式圖片,圖片切割等http 協議有部分採用 http2,多路復用,加快資源加載按需加載,菜單先加載第一屏的圖標,滑動到第二屏時再加載第二屏的圖標

而個人認為,還可以考慮用上的一些性能優化手段有:

html 的大小為138kb,Content Download的時間為七百多毫秒,感覺可以拆分一下頁面,非一二屏的內容分開加載。TTFB(Time To First Byte)為五百多毫秒,在下載第一個字節之前等待的時間過久,不過這裡主要是用戶網絡情況影響,可以做的比較少。如DNS解析優化,減少後端服務處理時間等合併雪碧圖,大輪播圖下面的菜單分類那裡的圖標,可以用一張雪碧圖來集合這些圖標頂部輪播圖,在首次加載時,可以先加載第一幀的圖片,後面幾幀延後一下

切到 Performance 面板,點擊自動重啟頁面,並記錄整個頁面加載的過程,然後來分析結果~

網絡&&白屏

性能面板,有很多很多的參數,我們要看一些比較常見的。首先看白屏時間和網絡加載情況,如下圖:

上圖,我們可以看幾點信息:FPS 曲線沒有標紅,如果有很多標紅的則說明頁面存在渲染卡頓多的地方從網絡資源加載情況來看,圖片沒有啟用 http2,因此每次可以同時加載的圖片數有限,未被加載的圖片有等待過程資源的加載時間也可以看到,比如輪播的背景圖加載了近 700 毫秒,時間有點長

另外,我們可以看一下資源加載有沒有空白期,雖然上圖沒有,但是如果資源加載之間存在空白期,說明沒有充分利用資源加載的空閒時間,可以調整一下。

火焰圖火焰圖,主要在 Main 面板中,是我們分析具體函數耗時最常看的面板,我們來看一下,如圖:

首先,面板中會有很多的 Task,如果是耗時長的 Task,其右上角會標紅(圖中沒有,說明頁面首屏的邏輯處理分配得還不錯),這個時候,我們可以選中標紅的 Task (這裡就隨手選中一個),然後放大(選中,滑動滑鼠可放大),看其具體的耗時點。

放大後,這裡可以看到都在做哪些操作,哪些函數耗時了多少,這裡代碼有壓縮,看到的是壓縮後的函數名。然後我們點擊一下某個函數,在面板最下面,就會出現代碼的信息,是哪個函數,耗時多少,在哪個文件上的第幾行等。這樣我們就很方便地定位到耗時函數了。還可以橫向切換 tab ,看它的調用棧等情況,更方便地找到對應代碼。具體大家可以試試~時間線&&內存情況

在 Timings 的區域,我們可以看到本次加載的一些關鍵時間,分別有:

FCP: First Contentful PaintLCP: Largest Contentful PaintFMP: First Meaningful PaintDCL: DOMContentLoaded Event

我們可以選區(選擇從白屏到有內容的區域,代表本次的頁面加載過程),可以對照著看一下上面的時間,截圖如下:

另外,我們可以看到頁面中的內存使用的情況,比如 JS Heap(堆),如果曲線一直在增長,則說明存在內存洩露,從圖中可以看出,相當長的一段時間,內存曲線都是沒有下降的,這裡是有發生內存洩露的可能的,在 Onload 之後,內存才得到釋放。更多內存洩露產生的原因及分析方法,可以參照我的這篇文章《Chrome 瀏覽器垃圾回收機制與內存洩漏分析》

最下方就是頁面的一個整理耗時概況,如果 Scripting 時間過長,則說明 js執行的邏輯太多,可以考慮優化js,如果渲染時間過長,則考慮優化渲染過程,如果空閒時間過多,則可以考慮充分利用起來,比如把一些上報操作放到頁面空閒時間再上報等。

以上就是性能面板可以看的一些信息。另外,我們可以藉助 Layers面板來查看頁面分層情況的3D視圖,Rendering面板(點擊more tools->Rendering即可打開),勾選Layer Bordersk可以看到複合層、RenderLayer區域,可以幫助分析動畫卡頓、是否開啟GPU加速等問題,而 Memory 面板 和 JavaScript Profiler 面板主要是分析內存洩露的,這裡就不說了,可以看我另一篇文章《Chrome 瀏覽器垃圾回收機制與內存洩漏分析》

Audits 其實就是 LightHouse,LightHouse 是Google開源的一個自動化測試工具,它通過一系列的規則來對網頁進行評估分析,最終給出一份評估報告。它的面板是這樣的:

整體情況

Audits主要從5個方面來給網頁打分,當然你也可以去掉某些方面的評估。在選擇了設備、評估方面、網絡情況等選項後,點擊 Run Audits ,我們將會得到一份報告。

上圖是一個總體報告,可以看出,這個頁面的性能不太合格。當然一次的測試也說明不了什麼問題,只能做個參考。我們看它的性能指標分別有:

First Contentful Paint:內容首次開始繪製。First Meaningful Paint:可以簡單理解為用戶看到網頁主要內容的時間,分數越低,頁面顯示其主要內容的速度就越快。圖中例子,網頁首次有效繪製時間為2.5s。Speed Index:速度指標是一個頁面加載性能指標,向你展示明顯填充頁面內容的速度,此指標的分數越低越好。First CPU Idle:首次 CPU 空閒時間Time to Interactive:可互動時間,頁面中的大多數網絡資源完成加載並且CPU在很長一段時間都很空閒的所需的時間。此時可以預期cpu非常空閒,可以及時的處理用戶的交互操作。Max Potential First Input Delay:最大的輸入延遲時間,輸入響應能力對用戶如何看待你應用的性能起著關鍵作用。應用有 100 毫秒的時間響應用戶輸入。如果超過此時間,用戶就會認為應用反應遲緩。

這些時間,都可以點擊圖中紅框切換展示方式,會附上對應的時間解釋,然後可以點擊 Learn more 來查看詳細的指標介紹。在文檔中,每一項指標都會明確的分為三個部分:為什麼說此審查非常重要;如何通過此審查;如何實現此審查;

性能指標優化建議解讀

性能建議主要分為3類, Opportunities 可優化項、手動診斷項、通過的審查項。本次的例子如下圖:

圖中的每一項都可以展開來看明細解釋,其中:

可優化項有2個建議:

延遲會阻塞渲染的資源加載,這裡是一個 navfoot.6bf68af7.css延遲視口外的圖片加載,這裡列舉了不必要加載的圖片(和我上文提的優化建議一致,哈哈)

這項裡面的內容指的是LightHouse發現的一些可以直接優化的點,你可以對應這些點來進行優化。

手動診斷項有6個建議:

這些項目表示LightHouse並不能替你決定當前是好是壞,但是把詳情列出來,由你手動排查每個項目的情況

通過的審查項

這裡列出的都是做的好的地方,本文例子共有16條,不過即使做的好,依然值得我們進去仔細看一下,因為像所有條目一樣,這裡的每個條目也有一個showmore,我們可以點進去仔細學習背後的知識和原理!

Accessibility輔助功能

輔助功能指的是那些可能超出"普通"用戶範圍之外的用戶的體驗,他們以不同於你期望的方式訪問你的網頁或進行交互,本文的例子建議如下圖:

輔助功能類別測試屏幕閱讀器的能力和其他輔助技術是否能在頁面中正常工作。例如:按元素來使用屬性,標籤使用是否規範,img 標籤是否缺少 alt 屬性,可辨別的元素命名等等。這一項我們不展開講,但是還是建議大家按照審計建議修改一下網頁。

其他幾項,本文的例子最佳實踐評分挺高的,而例子不支持PWA,也不需要考慮SEO,這裡就不展開說明了,有對應需求的可以自己詳細看看即可。

最後總結一下,我們利用Chrome Dev Tools 進行頁面性能分析有以下指標可以參考:

而這些分析方法,本文都詳細寫了。可以認真看看~

關於奇舞周刊

《奇舞周刊》是360公司專業前端團隊「奇舞團」運營的前端技術社區。關注公眾號後,直接發送連結到後臺即可給我們投稿。

相關焦點

  • 前端性能優化之利用 Chrome Dev Tools 進行頁面性能分析
    ,這篇文章,我將詳細說明怎樣利用 Chrome Dev Tools 進行頁面性能分析及性能報告數據如何解讀。更多內存洩露產生的原因及分析方法,可以參照我的這篇文章《Chrome 瀏覽器垃圾回收機制與內存洩漏分析》最下方就是頁面的一個整理耗時概況,如果 Scripting 時間過長,則說明 js執行的邏輯太多,可以考慮優化js,如果渲染時間過長,則考慮優化渲染過程,如果空閒時間過多,則可以考慮充分利用起來,比如把一些上報操作放到頁面空閒時間再上報等。
  • 從前端性能優化引申出來的5道經典面試題
    渲染優化渲染優化是前端優化中一個很重要的部分,一個好的首屏時間能給用戶帶來很好的體驗,這裡要說的一點是關於首屏時間的定義,不同的團隊對首屏時間定義不一樣,有的團隊認為首屏時間就是白屏時間,是從頁面加載到第一個畫面出現的時間。
  • 前端性能測試平臺及應用
    目前人們對性能的關注還主要集中在服務端,大部分人在說到「性能測試」的時候,都會把重點放到服務端的性能測試和調優,也就是通過各種方法找到服務端的性能瓶頸並嘗試對其進行調優。實際上,對於web應用來說,除了考慮服務端在足夠短的時間內返回頁面數據之外,還可以從頁面前端的角度來考慮性能測試和性能調優。本文將圍繞前端性能測試目的、測試平臺搭建及應用進行介紹。
  • 騰訊前端團隊是如何做web性能監控的?
    本文就來整理下如何進行 web 性能監控?包括我們需要監控的指標、監控的分類、performance 分析以及如何監控。但是,如何進行 web 性能監控本身是一個很大的話題,文中只會側重一部分進行研究,某些內容不是很全面。前言:為什麼需要監控?
  • Python 性能優化
    infoq上有一篇文章,提到禁用Python的GC機制後,Instagram性能提升了10%。感興趣的讀者可以去細讀。Be pythonic我們都知道 過早的優化是罪惡之源,一切優化都需要基於profile。
  • 系統架構性能優化思路
    來源:https://4m.cn/rN8IB今天談下業務系統性能問題分析診斷和性能優化方面的內容。這篇文章重點還是談已經上線的業務系統後續出現性能問題後的問題診斷和優化重點。業務系統性能問題擴展思考對於業務系統的性能優化,除了上面談到的標準分析流程和分析要素外,再談下其它一些性能問題引發的關鍵思考。上線前的性能測試是否有用?
  • 幾乎是史上最全最實用的Android性能全面分析與優化方案研究
    藉助性能優化工具分析解決問題性能優化指標性能問題分類1、渲染問題: 過度繪製、布局冗雜2、內存問題: 內存浪費(內存管理)、內存洩漏3、功耗問題: 耗電性能優化原則和方法2、優化方法了解問題(分為可感知和不可感知的性能問題):對於性能問題來講,這個步驟只適用於某些明顯的性能問題,很多無法感知的性能問題需要通過工具定位。例如:內存洩漏、層級冗雜、過度繪製等無法感知。滑動卡頓是可以感知到的。定位問題:通過工具檢測、分析數據,定位在什麼地方存在性能問題。
  • 網頁性能之html css javascript
    前言html css javascript可以算是前端必須掌握的東西了,但是我們的瀏覽器是怎樣解析這些東西的呢 我們如何處理html css javascript這些東西來讓我們的網頁更加合理,在我這裡做了一些實驗,總結起來給大家看看。
  • SPA單頁面應用優化VUE性能優化
    SPA單頁面應用優化VUE性能優化單頁面應用離不開構建工具比如webpack、fis3、gulp等,目前應用最多的就是webpack,咱們就用webpack來做優化,webpack能做哪些優化呢?懶加載在一些大型的網站中見到的比較多,因為網站考慮到性能、流量及用戶體驗方面的問題,在用戶點擊開網站的首頁的時候,網站想儘可能的顯示更多的信息給用戶,又要考慮到伺服器的性能的問題,還不能讓用戶等待的時間過長,所以這裡就會使用圖片的懶加載。
  • QQ音樂Android客戶端Web頁面通用性能優化實踐
    跨端優化的局限現有跨端優化方案,包括離線包、VasSonic 等,為了達到最好的優化效果,均需要前端終端共同參與改造。這導致存量頁面的邏輯改造增加,對線上頁面不夠友好,引入額外的成本和風險。在前端開發資源不足時,這些優化的開展存在一定難度。從減少前端開發工作量的角度來看,需要思考更具通用性、前端感知更小的優化方案。
  • 前端開發規範(三、CSS性能優化)
    性能優化慎重選擇高消耗的樣式高消耗屬性在繪製前需要瀏覽器進行大量計算:box-shadows動畫性能優化動畫的實現原理,是利用了人眼的「視覺暫留」現象,在短時間內連續播放數幅靜止的畫面,使肉眼因視覺殘象產生錯覺,而誤以為畫面在「動」。
  • 聽雲應用性能管理大講堂 APP性能優化專場乾貨大放送
    維納斯之謎:如何提升APP在複雜行動網路環境下的連通率來自騰訊雲的高級工程師顧超然首先為聽眾帶來了主題為「維納斯之謎:如何提升APP在複雜行動網路環境下的連通率」的演講,顧超然從APP如何高效的傳輸數據開始,到以開發者的角度理解行動網路、無線行動網路的特點再到HTTPS延時分析,深入淺出的分析了APP進行高效傳輸數據的幾大技術要點:
  • 分步驟詳細解說:H5性能優化方案
    H5性能優化意義對於一個H5的產品,功能無疑很重要,但是性能同樣是用戶體驗中不可或缺的一環。原本H5的渲染性能就不及native的app,如果不把性能優化做起來,將極大地影響用戶使用產品的積極性。因此在H5性能優化中,一個很重要的目的就是儘可能提升這個「首屏加載」的時間,讓它滿足「一秒鐘法則」。按需加載首先要明確,按需加載雖然能提升首屏加載的速度,但是可能帶來更多的界面重繪,影響渲染性能,因此要評估具體的業務場景再做決定。
  • 說說那些經典的web前端面試題-開發及性能優化
    4、web前端開發,如何提高頁面性能優化?精簡 JavaScript 與 CSS (Minify JavaScript and CSS)移除重複腳本 (Remove Duplicate Scripts)面向圖片(Image):優化圖片
  • 高並發場景下如何優化伺服器的性能?
    那今天,我們就來根據這個問題來聊聊在高並發場景下如何優化伺服器的性能這個話題。CentOS Linux release 8.0.1905 (Core)  對於高並發的場景,我們主要還是優化作業系統的網絡性能,而作業系統中,有很多關於網絡協議的參數,我們對於伺服器網絡性能的優化,主要是對這些系統參數進行調優,以達到提升我們應用訪問性能的目的。
  • Android性能優化總結
    這是來自一位粉絲「MeloDev」的投稿,講真,我這裡投稿的不少,但是只有我自己覺得很不錯的才會通過,這篇文章我覺得對大家有用,而且性能優化也算是我面試必問的一個話題了,所以這裡推薦給大家。程序執行效率:糟糕的代碼會嚴重影響程序的運行效率,UI線程過多的任務會阻塞應用的正常運行,長時間持有某個對象會導致潛在的內存洩露,頻繁的IO操作、網絡操作而不用緩存會嚴重影響程序的運行效率。一、布局複雜度的優化關於布局的優化,主要分兩個大方向1.
  • 性能優化之PHP優化
    在我們平常寫代碼的過程中,除了資料庫的優化,針對與文件的優化,我們還需要對PHP執行優化,當然對於老司機來說,這都是毛毛雨咯~但是畢竟有新手嘛,於是,我整理這麼一片文章。(未完待續...)性能優化之PHP優化(一):PHP結構1.字符串
  • 基於監控寶的跨境電商網站性能優化實戰
    為了搶佔中國市場,追逐利潤,跨境電商紛紛展開各種對策,其中對電商網站進行性能優化是其重要一環。什麼是網站性能?、API監控、網頁性能監控、行業內數據對比,找出網站性能問題以及產生的根本原因,並提供解決方案及優化建議。
  • 美國網站伺服器性能優化的方法
    提高美國網站伺服器的性能,以最大限度的利用率實現利益的最大化,這是很多美國網站伺服器用戶所希望達到的效果,因此美國網站伺服器的的性能優化是非常重要且必要的工作。今天小編就來分享下美國網站伺服器性能優化的方法。
  • Python性能分析技巧
    在本文中,我們將學習一些Ipython的命令,這些命令可以幫助我們對Python代碼進行時間分析。1.分析一行代碼要檢查一行python代碼的執行時間,請使用**%timeit**。2.分析多行代碼本節向前邁進了一步,並解釋了如何分析完整的代碼塊。通過對%timeit magic命令進行一個小的修改,將單百分比(%)替換為雙百分比(%%),就可以分析一個完整的代碼塊。