成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

前端性能優(yōu)化 — 保姆級 Performance 工具使用指南

開發(fā) 前端
說到前端性能,就少不了性能分析的利器 —— Performance ;我想各位前端小伙伴,在使用 Chrome 瀏覽器 DevTool 時或多或少都有留意到這個面板吧?

性能分析一直是前端er們津津樂道的話題;而俗話說得好:工欲善其事,必先利其器;

說到前端性能,就少不了性能分析的利器 —— Performance ??;我想各位前端小伙伴,在使用 Chrome 瀏覽器 DevTool 時或多或少都有留意到這個面板吧?

圖片圖片

今天我們就邁開性能分析的第一步,來探究一下 Performance 這個強大的工具。

文章中提到的 Performance 面板,以 Chrome 118 版本為參考。

Performance 面板

我們打開 Performance 面板:

圖片圖片

我把 Performance 面板大概劃分為操作區(qū)、設置區(qū)、報告區(qū)三塊區(qū)域:

  • 操作區(qū):主要用于性能分析的開啟、關閉、性能報告的上傳下載等;
  • 設置區(qū):用于設置性能數(shù)據(jù)分析期間的各項指標,比如:CPU 運算能力、網(wǎng)絡狀態(tài)等等;
  • 報告區(qū):顧名思義,就是呈現(xiàn)最終性能分析報告的地方。

下面我們先來一起看看操作區(qū)的內(nèi)容。

操作區(qū)

觀察下圖中用紅線框起來的部分,這里有幾個按鈕:

圖片圖片

錄制報告

按鈕圖片圖片的功能大致相同,都是用于記錄頁面性能數(shù)據(jù);

兩個按鈕點擊后都會出現(xiàn)下面這樣的彈窗:

圖片圖片

image.png

不過需要注意的是,這兩種錄制方式之間有一些不同:

  • 點擊圖片(Record) 按鈕,Chrome 會開始記錄交互階段的性能數(shù)據(jù),需要手動點擊 Stop 停止錄制;
  • 而點擊圖片(Start Profiling and reload page) 按鈕,Chrome 會重新刷新頁面并自動開始記錄,等到頁面完全渲染出來后自動結束記錄。

清除報告

錄制完成的數(shù)據(jù),如果我們不需要了,就可以點擊圖片(Clear) 按鈕來清除數(shù)據(jù);

是不是很一目了然呢?

上傳/下載報告

當我們的數(shù)據(jù)錄制完成,就可以 點擊圖片(Save Profile) 按鈕來將錄制的報告下載保存在本地;

有了下載,當然少不了它的好兄弟上傳!

點擊圖片(Load Profile) 就可以將本地報告再次上傳到 Performance 面板中;

報告對比

實際上,我們每次錄制的報告都被自動留存起來;

當存在多份性能報告時,還可以通過下拉切換查看不同的報告:

圖片圖片

這樣就能很方便地對比不同時間段的性能報告。

圖中用紅虛線框起來的部分,就是用于切換報告的下拉框。

Screenshots 和 Memory

在操作區(qū)的右邊還有兩個復選框,Screenshots 和 Memory:

圖片圖片

Screenshots

當勾選 Screenshots 后,在生成的性能報告中就會多出一欄用于記錄頁面在加載過程中的每一幀的視覺變化,并生成一系列快照;

并且當鼠標 hover 在這個區(qū)域時,就可以查看當前幀的快照:

圖片圖片

通過查看這些快照,我們就可以了解頁面在不同時間點的渲染情況。

Memory

而 Memory 功能則是用于觀察頁面的內(nèi)存使用情況隨時間的變化。

當勾選 Memory 功能后,在性能報告中就會顯示頁面的總內(nèi)存使用量、堆內(nèi)存使用量以及各種 JavaScript 對象的內(nèi)存分配情況:

圖片圖片

同樣,當鼠標 hover 在下方不同類型文件占據(jù)內(nèi)存情況的折線圖時,就可以查看當前時間點下這些文件使用內(nèi)存的情況。

垃圾回收

最后,操作區(qū)的圖片(Collect garbage) 按鈕用于手動觸發(fā) JavaScript 垃圾回收。

圖片圖片

image.png

當我們在進行性能測試時,就可以在特定的時間點手動觸發(fā)垃圾回收,以確保測試結果的準確性。

設置區(qū)

在文章前面簡單介紹過,設置區(qū)主要用于設置性能數(shù)據(jù)分析期間的各項指標;

下面我們來看看具體可以做哪些設置:

圖片圖片

Disable JavaScript samples

默認情況下,Chrome 在做性能分析采樣時會記錄當前 JavaScript 執(zhí)行的堆棧信息,并在報告區(qū)的 Main 部分呈現(xiàn)出來:

如果我們不關注 JavaScript 執(zhí)行相關的性能,比如:測試在不同網(wǎng)絡情況下的代碼執(zhí)行性能、測試渲染性能時;

這種情況下就可以勾選 Disable JavaScript samples 這個選項,從而提高性能分析的效率;

未勾選 Disable JavaScript samples 的情況下,報告區(qū)記錄了 JavaScript 執(zhí)行時的堆棧信息 (圖中紅線框起的部分) :

圖片圖片

勾選了 Disable JavaScript samples 的情況下,報告區(qū)只記錄了一些高級事件,比如:Function Call、渲染相關事件等:

圖片圖片

Enable advanced paint instrumentation

這個選項用于啟用高級繪制儀器;當你勾選了這個選項后,Chrome 將記錄更詳細的繪制信息,包括每個繪制操作的時間、持續(xù)時間、繪制區(qū)域等。

勾選了 Enable advanced paint instrumentation 后,當鼠標選中報告中 Frames 數(shù)據(jù)的某一幀時,在下方的面板里就會多出一個 Layers 的選項;

圖片圖片

我們知道,瀏覽器在渲染一個頁面時會有針對性的對一些效果進行分層,而 Layers 的選項下展示的正是頁面的圖層樹信息:

圖片圖片

通過觀察這些繪制操作的時間和持續(xù)時間,就能判斷哪些繪制操作占用了較長的時間,可能導致頁面渲染緩慢對癥下藥。

CPU 和 Network

在 CPU 下拉選項中,我們可以通過降低 CPU 的性能,來模擬低性能設備上的頁面運行情況;比如移動設備,或者一些比較老舊的計算機;

而 Network 下拉框可以選擇不同的網(wǎng)絡條件,用于模擬網(wǎng)絡不佳的情況下頁面的運行情況。

Hardware concurrency

hardware concurrency 選項用于模擬硬件并發(fā)性能;勾選這個選項后,我們就可以選擇從 1 到最大硬件并發(fā)性能水平之間的值,以模擬不同的硬件環(huán)境。

通過切換不同的 hardware concurrency 值,可以觀察頁面在不同硬件并發(fā)性能水平下的性能表現(xiàn);這對于優(yōu)化頁面的并發(fā)處理和多線程任務非常有幫助。

硬件并發(fā)性能是指處理器(CPU)同時執(zhí)行多個線程或任務的能力?,F(xiàn)代計算機通常具有多核處理器,每個核心都可以同時執(zhí)行多個線程。硬件并發(fā)性能的提高可以顯著提升計算機的性能和響應能力。

報告區(qū)

接下來就是我們的重頭戲,最終性能分析報告呈現(xiàn)的區(qū)域;我們之前介紹的操作、設置最終都是為性能報告服務。

我們以掘金首頁為例,來看看報告區(qū)都有哪些內(nèi)容。

首先,我們要打開谷歌瀏覽器的無痕模式;默認快捷鍵是 Command+Option+N (Mac) 或者 Control+Shift+N (Windows, Linux);

然后打開 掘金首頁[1],點擊圖片(Start Profiling and reload page) 按鈕來進行錄制;

等待幾秒鐘后,一份完整的性能報告就呈現(xiàn)出來啦:

圖片圖片

從上圖中可以看出,這份性能報告大概可以分為兩塊區(qū)域:概覽區(qū)、性能報告區(qū)。

而所有的這些性能指標都是基于時間的維度來展示的,因此在性能報告中還有一條貫穿整個報告的時間線。

使用無痕模式是為了避免安裝的一些插件對性能測試產(chǎn)生影響。

概覽區(qū)

首先,概覽區(qū)的 x 軸就是時間線,而 y 軸展示了幾個關鍵指標:CPU 占用情況、NET 網(wǎng)絡請求情況、HEAP 堆內(nèi)存使用量等;如果勾選了 Screenshots 還會有每一幀的繪制快照。

這些指標會以時間為順序,通過圖表的形式展現(xiàn)出來。

當我們用鼠標點擊這個區(qū)域,在下方的性能報告和詳情信息區(qū)域,就會呈現(xiàn)這一時間區(qū)間的性能情況:

圖片圖片

同時,還支持通過多種方式改變時間區(qū)間的長度:

  • 滾動鼠標滾輪;
  • 按住鼠標左鍵拖動;
  • 拖拽滑塊時間區(qū)間兩邊的滑塊;
  • 鍵盤上的 w 鍵和 s 鍵。

而使用鍵盤上的 a 鍵和 d 鍵則可以在固定時間區(qū)間長度的同時,精確修改時間區(qū)間的作用范圍。

性能報告區(qū)

這個區(qū)域呈現(xiàn)了許多性能指標項,我們一起來看看吧。

Network

Network 部分展現(xiàn)的是網(wǎng)絡請求的瀑布圖,我們點擊圖片圖標就可以展開這個面板:

圖片圖片

請求的文件類型

從圖中可以看出,這些網(wǎng)絡請求的瀑布圖有許多種顏色,這些顏色就代表了請求對應的文件類型:

  • 圖片藍色: 請求 HTML 文檔;
  • 圖片紫色:請求 CSS 文件;
  • 圖片黃色: 請求 JS 文件;
  • 圖片綠色: 請求圖片;

請求時長的構成

不知道小伙伴們有沒有注意到,瀑布圖中的每個請求都被分為了四個部分:左側(cè)的線條、中間淺色的條形圖形、中間深色的條形圖以及右側(cè)的線條;

這些劃分又有什么含義呢?

  • 左側(cè)的線:我們知道,在發(fā)送一個網(wǎng)絡請求前,需要先解析 URL、建立連接等一系列操作;而左側(cè)的線代表了 請求的開始,直到 Connection Start 事件組相關事件結束(包括 Connection Start 事件) ;
  • 中間的淺色部分條形圖代表了 Request Sent 和 Waiting (TTFB,即 Time To First Byte) 的時間;TTFB 是指從發(fā)送請求到接收到第一個字節(jié)的時間,它表示了服務器響應的延遲時間。
  • 中間的深色部分條形圖代表了從接收到第一個字節(jié)到請求的所有內(nèi)容都被下載完成的時間。
  • 最后右側(cè)的線代表了主線程等待的時間。

圖片圖片

請求的優(yōu)先級

仔細觀察每個請求,會發(fā)現(xiàn)請求左上角有個小小的方塊,這個方塊代表了本次請求的優(yōu)先級。

深藍色的方塊表示本次請求優(yōu)先級更高;而淺藍色方塊表示優(yōu)先級較低。

圖片圖片

請求的詳細信息

接下來,我們點擊其中一個網(wǎng)絡請求,可以看到下方的面板展示了請求的詳情信息,包括請求時間、請求方法、優(yōu)先級等等:

圖片圖片

Frames

Frames 區(qū)域展示了繪制一個幀所花費的確切時間;在這個部分,同樣用顏色來區(qū)分了四種類型的幀:

  1. 空閑幀(白色):表示在該幀中沒有發(fā)生任何渲染或更新。
  2. 正常幀(綠色圖片):表示該幀在適當?shù)臅r間內(nèi)被渲染出來,沒有出現(xiàn)延遲或問題。
  3. 部分呈現(xiàn)幀(黃色,帶有稀疏的寬虛線圖案圖片):表示 Chrome 盡力在適當?shù)臅r間內(nèi)渲染了部分視覺更新。例如:渲染器進程的主線程的工作延遲了,但合成器線程(如滾動)按時完成了渲染,則會出現(xiàn)這種情況。
  4. 丟幀(紅色,帶有密集的實線圖案圖片):表示該幀由于性能問題或其他原因?qū)е卵舆t,無法按時渲染。

Timings

Timings 這個模塊展示了衡量網(wǎng)頁性能(FP、FCP、DCL、LCP、L)的幾個關鍵指標,以及完成指標對應的時間:

圖片圖片

我們來看看這些指標都代表什么含義:

FP (First Paint)

指頁面的首次渲染的時間點。在完成首次渲染之前,用戶看到的都是 沒有任何內(nèi)容的白色頁面,也就是我們常說的 白屏時間。

FP 可以反映頁面加載的整體速度。

FCP (First Contentful Paint)

指頁面的首個內(nèi)容繪制時間,即瀏覽器在頁面上繪制出第一塊有實際內(nèi)容的區(qū)域(如文本、圖像等)的時間點。

FCP 反映了用戶可以看到有意義的內(nèi)容的時間。

DCL (DOM Content Loaded)

指當 HTML 文檔被完全加載和解析后,DOM 樹構建完成并且所有關聯(lián)資源(如樣式表、腳本等)已經(jīng)下載完成,觸發(fā) DOMContentLoaded 事件的時間點。

DCL 反映了頁面的可交互性,表示頁面已經(jīng)準備好響應用戶的操作。

LCP (Largest Contentful Paint)

指頁面上最大的一個可見元素(如圖片、文本等)繪制完成的時間點。

LCP 是衡量頁面加載速度的重要指標,它反映了頁面主要內(nèi)容的加載完成時間。

L (Load)

指頁面完全加載完成的時間點。包括所有資源(如圖片、樣式表、腳本等)都已下載完成,并且相關的 DOM、CSSOM 和 JavaScript 都已經(jīng)處理完成。

L 反映了整個頁面加載的時間。

Layout Shifts

這個指標用于衡量 頁面加載過程中發(fā)生的視覺不穩(wěn)定性。

那么什么叫做視覺不穩(wěn)定性呢?

實際上,當用戶在頁面加載期間進行交互時,如果頁面中的元素發(fā)生意外的移動或調(diào)整,會導致頁面上的元素重新排列,從而造成視覺上的不連續(xù)和不穩(wěn)定感。

這種 元素的移動可能會干擾用戶的操作,例如點擊了一個不想點到的按鈕,或者導致誤觸其他元素。

我們點擊 Layout Shifts 區(qū)域的色具體色塊,在下方的 Summary 一欄就會展示此次位移的具體信息:

圖片圖片

Main

這項指標可謂是整個性能報告中的重點區(qū)域,其中展示了 主線程在進行的相關活動。

火焰圖

Main 指標中圖表的這種展現(xiàn)方式稱為火焰圖;而堆疊組成火焰圖的這些彩色矩形,則代表一個個函數(shù)調(diào)用堆棧:

圖片圖片

矩形顏色

與 Network 用固定顏色來區(qū)分請求類型不同,Main 指標中的顏色是隨機分配的。

但是來自同一個腳本的調(diào)用在記錄中會被分配為相同的顏色。

長任務

小伙伴們可能已經(jīng)留意到了,在有的 Task 中除了灰色的區(qū)域外,還有部分被紅色密集實線覆蓋,同時右上角還有一個紅色的三角 :

圖片圖片

這實際上是用來標識這個任務是個長任務。

執(zhí)行時長超過 50 毫秒的任務會被定義為長任務;而超過 50 毫秒的部分就會用這種紅色密集實線覆蓋圖片

這些長任務可能會阻塞主線程,導致頁面卡頓、無法及時響應用戶輸入等等;是我們需要 重點關注 的對象。

矩形堆疊邏輯

圖中位于最上方的 Task 表示 一個由瀏覽器調(diào)度和執(zhí)行的任務單元;Task 的 長度就表示這個任務執(zhí)行時間的跨度。

而 Task 下方的這些矩形是根據(jù)函數(shù)之間的調(diào)用關系來堆放的,比如 ——

上圖中,一個指針事件 pointermove 的觸發(fā),導致了一個 (匿名函數(shù)調(diào)用(Function Call) ;而這個匿名函數(shù)調(diào)用又引起了 value 函數(shù)的調(diào)用...以此類推一直到最后的函數(shù) n。

任務具體信息

下面我們來查看一下對應任務的具體信息。

當我們選中任意一個任務時,下方的面板就會展現(xiàn)對應的信息:

圖片圖片

Summary

Summary 選項卡展示了 當前任務的具體信息,包括長任務警告、總?cè)蝿諘r長、各個子任務耗時等等:

圖片圖片

Bottom-Up

Bottom-Up 選項卡將當前任務下所有活動都展示出來,并且根據(jù)時間進行倒序排序。

這樣一來,一眼就能看出是哪個活動耗費了較長的時間:

圖片圖片

并且還貼心的提供了篩選 (Filter) 功能和分組 (Grouping) 功能,方便我們分類查看:

圖片image.png

圖中可以看出,整個圖表分為三列:

  • Self Time 表示這個根活動自身花費的時間;
  • Total Time 表示這個根活動自身以及導致的子活動花費的時間總和。
  • Activity 就是對應的活動名稱;并且點擊活動名稱右側(cè)的鏈接,還可以直接跳轉(zhuǎn)到對應的源碼。

圖片圖片

Call Tree

Call Tree 選項卡可以用來查看當前任務下的根活動,以及根活動引發(fā)的一系列子活動的耗時。

圖片圖片

根活動是那些導致瀏覽器做一些工作的活動。比如前面提到的 pointermove ,瀏覽器會觸發(fā)一個Event活動作為根活動,該事件可能導致處理程序執(zhí)行,依此類推。

可以簡單理解為火焰圖頂層的活動。

Event Log

最后的 Event Log 選項卡是按照活動在記錄過程中發(fā)生的先后順序來呈現(xiàn)表格的:

圖片圖片

這里的下拉不是用來做分組 (Grouping) 的,而是以時間為維度來過濾濾掉耗時少于 1 毫秒或 15 毫秒的活動:

圖片圖片

而旁邊 Loading、Scripting、Rending、Painting 這些復選框,是用于通過類型來過濾表格中的數(shù)據(jù):

圖片圖片

并且這里的表格多了一列 Start Time;顧名思義就是對應活動的開始時間。

其余部分

報告區(qū)中剩余的信息,比如 ——

  • GPU:展示了 GPU 的活動情況;
  • Compositor:展示了合成線程的活動情況;

這些都大同小異,在這里就不一一展開講啦,留給大家自己去探索。

責任編輯:武曉燕 來源: 量子前端
相關推薦

2019-11-01 14:00:58

前端性能優(yōu)化代碼

2021-05-11 10:03:06

性能優(yōu)化工具Performance

2024-02-02 15:21:08

工具頁面性能

2022-09-23 17:26:04

VeleroKubernetes

2022-12-12 11:09:21

企業(yè)技術采購IT

2022-09-29 09:07:08

DataGrip數(shù)據(jù)倉庫數(shù)據(jù)庫

2021-09-30 09:00:00

漏洞安全工具

2025-01-13 07:23:14

PythonAeon開發(fā)

2020-07-22 08:27:26

函數(shù)監(jiān)控前端

2016-04-18 12:02:56

前端構建Gulp.js

2021-07-27 10:09:27

鴻蒙HarmonyOS應用

2011-07-21 14:57:34

jQuery Mobi

2010-09-06 14:24:28

ppp authent

2009-12-28 17:40:10

WPF TextBox

2012-12-26 12:41:14

Android開發(fā)WebView

2023-11-03 07:50:01

2022-09-06 10:39:38

Docker鏡像構建

2017-01-04 15:22:57

TrimPath模板引擎

2010-06-03 17:27:36

Hadoop命令

2010-08-04 15:37:31

Flex圖表
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 九一在线观看 | 99精品在线| 欧美一区二区视频 | 欧美亚洲国产一区 | 在线视频一区二区三区 | 成人三级网址 | 天天操夜夜操 | 日韩精品av一区二区三区 | 国产小视频在线 | 特黄特色大片免费视频观看 | 草久在线 | 天堂中文av | 日本一区不卡 | 国产精品视频999 | 国产一区二区三区色淫影院 | 欧美日韩在线观看视频网站 | 免费日韩av | 久久精品无码一区二区三区 | 狠狠骚 | 国产成人精品网站 | 九九热这里只有精品6 | 91在线视频观看免费 | 欧美a在线| 一级片免费在线观看 | www.欧美视频| 欧美日韩精品影院 | 视频在线h | 日韩三级电影在线看 | 91九色porny首页最多播放 | 欧美二级 | 成人免费视频一区 | 波多野吉衣在线播放 | 中文字幕99 | 亚洲永久字幕 | 91精品国产乱码久久久久久久久 | 久久99精品久久久久久国产越南 | 久久综合888 | 欧美在线一区二区视频 | 精品国产一区三区 | 欧美精品一区二区在线观看 | 国产精品日韩欧美一区二区三区 |