小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

Chrome開發(fā)者工具使用指南

 雅藏軒 2021-08-26

前言

工欲善其事,必先利其器。

在前端工作中,我們常常使用到Chrome開發(fā)者工具去做各種各樣的事情。

但是您真的了解這些開發(fā)者工具嗎?

官方文檔還是挺詳細(xì)的:chrome-devtools文檔。

但是文檔中仍然會(huì)有一些功能沒有描述到或者被一筆帶過(guò)。

而我的這篇指南,會(huì)略過(guò)那些一目了然的功能以及一些容易替代的方案,寫一寫那些您可能不太了解的功能和文檔描述不清的功能。

閱讀本篇文章需要有一定的前端基礎(chǔ)。

媒體查詢功能

Chrome開發(fā)者工具不僅可以調(diào)試web應(yīng)用,還可以模擬各種終端設(shè)備。

通過(guò)激活下圖中紅框部位開啟設(shè)備工具欄。

工具欄可以切換模擬各種型號(hào)的設(shè)備,也可以通過(guò)自適應(yīng)模式(Responsive)來(lái)調(diào)整視口。

這里通過(guò)更多工具中的Show media queries查看媒體查詢:

圖中藍(lán)色區(qū)塊為最大寬度斷點(diǎn),黃色區(qū)塊為最小寬度斷點(diǎn)。

右鍵相應(yīng)區(qū)塊還可以跳轉(zhuǎn)到具體的css文件中的媒體查詢代碼。

模擬傳感器(地理位置,手機(jī)朝向)

點(diǎn)擊更多工具中的Sensors(傳感器)

在這里可以模擬地理位置,手機(jī)朝向

生成頁(yè)面全尺寸快照?qǐng)D片

通過(guò)下圖操作,可以生成一張頁(yè)面全尺寸的快照。

而它上面那個(gè)選項(xiàng)是生成當(dāng)前視口大小的圖片。

控制臺(tái)快速獲取元素面板的元素

在元素面板上選中一個(gè)元素后:

細(xì)心的朋友會(huì)發(fā)現(xiàn)后面總是會(huì)出現(xiàn)一個(gè)== $0的提示。

此時(shí)在控制臺(tái)輸入$0,實(shí)際上就可以獲取到該元素。

通過(guò)這種方式,即使對(duì)于那些沒有classid的元素,我們也可以在控制臺(tái)快速獲取并使用。

您可能會(huì)問(wèn):那我要是想在控制臺(tái)調(diào)用多個(gè)這樣的元素呢?

選中元素,右鍵,選擇選項(xiàng):Store as global variable

此時(shí)會(huì)將選中的元素存儲(chǔ)在一個(gè)臨時(shí)變量中,并自動(dòng)在控制臺(tái)輸出這個(gè)變量的名字。

頁(yè)面跳轉(zhuǎn)到元素面板指定的元素

某些時(shí)候頁(yè)面元素出現(xiàn)BUG,不知道跑到哪去了,我們需要頁(yè)面跳轉(zhuǎn)到這個(gè)元素所在的位置。

如果我們知道它的id或者class,我們可以通過(guò)在控制臺(tái)輸入js命令去跳轉(zhuǎn):

document.querySelector('.icon-cool').scrollIntoView()

當(dāng)然也可以通過(guò)我們上面說(shuō)到的$0做到:

$0.scrollIntoView()

但是有個(gè)更簡(jiǎn)單的辦法,那就是右鍵元素面板上的指定元素,然后點(diǎn)擊Scroll into view的選項(xiàng)。

DOM斷點(diǎn)

同樣右鍵元素面板上的元素,發(fā)現(xiàn)有個(gè)Break on的選項(xiàng),這里可以打DOM斷點(diǎn)。

從上往下依次是子節(jié)點(diǎn)改變時(shí)斷下,元素屬性改變時(shí)斷下,節(jié)點(diǎn)移除時(shí)斷下。

打下斷點(diǎn)后,在左側(cè)會(huì)有斷點(diǎn)標(biāo)識(shí),右側(cè)的DOM Breakpoints也會(huì)有相應(yīng)的顯示。

點(diǎn)擊DOM Breakpoints的相應(yīng)DOM斷點(diǎn),元素面板也會(huì)定位到相應(yīng)元素。

當(dāng)js去修改指定元素的DOM結(jié)構(gòu)時(shí),就會(huì)在修改的位置斷下。

這種斷點(diǎn)很方便查找到究竟是哪里對(duì)頁(yè)面元素進(jìn)行了修改。

元素事件偵聽器

在元素面板選中元素,右側(cè)的Event Listeners會(huì)顯示該元素上的事件。

如果勾選了Ancestors(祖先),那么會(huì)展示祖先節(jié)點(diǎn)的事件,通常不需要勾選這個(gè)。

點(diǎn)擊事件右側(cè)的鏈接可以跳轉(zhuǎn)到附加事件的代碼。

通常一些js框架或庫(kù)(比如jQeury)會(huì)將原生DOM事件進(jìn)行封裝,而這會(huì)導(dǎo)致我們通過(guò)元素事件偵聽器跳轉(zhuǎn)到的代碼是這些庫(kù)文件的封裝代碼。

不過(guò)如果我們勾選了Framework listeners(框架偵聽器),那么就會(huì)跳轉(zhuǎn)到我們使用庫(kù)文件事件API的地方,而不是庫(kù)文件里。

Framework listeners對(duì)于jQuery這樣對(duì)事件進(jìn)行簡(jiǎn)單封裝的特別好用,但是對(duì)于React這種的話作用有限。

查看當(dāng)前頁(yè)面對(duì)css和js使用覆蓋率

通過(guò)以下方式打開Coverage選項(xiàng)卡,這個(gè)可以查看當(dāng)前頁(yè)面對(duì)css和js的使用覆蓋率。

點(diǎn)擊左上角按鈕開始記錄:

如上圖可以單純查看css還是js,或者都查看。

選中單個(gè)文件,還可以查看具體是哪些代碼或者css沒有使用到。

記錄期間,我們做各種操作,都會(huì)影響到這個(gè)使用覆蓋率的變動(dòng)。

對(duì)于現(xiàn)在常用的單頁(yè)面應(yīng)用而言,尤為有效,因?yàn)榍袚Q頁(yè)面實(shí)際并沒有改變html,所以這個(gè)記錄一直有效。

對(duì)于以往采用jQuery的多頁(yè)面應(yīng)用而言,當(dāng)切換了頁(yè)面之后,記錄就重新開始了。

不過(guò)不管是單頁(yè)面還是多頁(yè)面,通過(guò)這種方式都是可以查看相應(yīng)的js和css的使用覆蓋率的,對(duì)于優(yōu)化css和js,刪除無(wú)用的廢代碼,以及代碼文件拆分都很有幫助。

使用本地文件調(diào)試生產(chǎn)環(huán)境網(wǎng)站代碼

我們調(diào)試生產(chǎn)環(huán)境的BUG,經(jīng)常需要修改樣式或者js,但是頁(yè)面一刷新這些東西就又還原了。

所以這里有個(gè)神技,可以將生產(chǎn)環(huán)境的引用文件進(jìn)行本地化,然后修改本地化后的文件進(jìn)行調(diào)試。

首先我們需要打開在Source面板下左側(cè)的Overrides選項(xiàng)卡,選擇一個(gè)本地文件夾作為覆蓋文件夾。

這里我選擇了一個(gè)名為test的文件夾。

然后我們切換到Source面板的Page選項(xiàng)卡,選中某個(gè)文件,然后右鍵,選中選項(xiàng)Save for overrides。

此時(shí)切回Overrides選項(xiàng)卡,發(fā)現(xiàn)test文件夾中已存在相關(guān)的js文件。

修改該文件的js內(nèi)容,再保存,即使刷新之后修改后的內(nèi)容依然會(huì)生效,并且頁(yè)面會(huì)加載我們修改之后的js文件。

Animation動(dòng)畫檢查器

通過(guò)下圖方式可以打開Animation檢查器:

這個(gè)檢查器自動(dòng)開始監(jiān)聽頁(yè)面上的動(dòng)畫,但是這個(gè)時(shí)候動(dòng)畫已經(jīng)加載完了,監(jiān)聽不到,需要我們重新刷新頁(yè)面才行。

選中其中的一個(gè)動(dòng)畫,會(huì)顯示如下圖的效果:

通過(guò)它我們可以查看和調(diào)整CSS動(dòng)畫和過(guò)渡的各種效果。

Rendering選項(xiàng)卡(高亮重排重繪合成層,fps和gpu占用,滾動(dòng)優(yōu)化,媒體查詢模擬如打印)

Rendering選項(xiàng)卡,顧名思義是做一些渲染相關(guān)的事。

通過(guò)下圖方式打開Rendering選項(xiàng)卡:

下面是選項(xiàng)卡的界面:

  • Paint flashing 高亮頁(yè)面重繪區(qū)域。

  • Layout Shift Regions 高亮布局變動(dòng)區(qū)域(重排)。

  • Layer borders 高亮合成層邊框,對(duì)于減少合成層還是挺好用的。

    以上三點(diǎn),如果不太清楚,可以看看這篇好文:瀏覽器渲染詳細(xì)過(guò)程:重繪、重排和 composite 只是冰山一角。

    簡(jiǎn)略一點(diǎn)來(lái)說(shuō),渲染過(guò)程就是DOM樹+樣式樹,合成渲染樹,渲染樹加上層疊遮罩之類的再演變?yōu)長(zhǎng)ayer樹,Layer樹再合成為為Graphics Layers即Composite Layer,再丟給GPU進(jìn)行處理。

  • Scrolling Performance Issues 用于優(yōu)化滾動(dòng)性能問(wèn)題。

    這個(gè)是用來(lái)高亮可能會(huì)影響滾動(dòng)性能的元素,這些元素主要指綁定了scroll事件和touch事件的元素。

    scroll大家可能會(huì)比較理解,touch的話其實(shí)也可以影響滾動(dòng)性能,最直觀的就是只要我們禁止了某元素上touch的事件中禁止瀏覽器默認(rèn)行為,那么就不會(huì)再觸發(fā)scroll事件。

    而touch的影響還不止如此,比如將touch-action改為manipulation可以減少移動(dòng)端瀏覽器在用戶點(diǎn)擊事件的延遲,但是這個(gè)東西會(huì)影響到滾動(dòng)時(shí)的性能。

    當(dāng)您開Scrolling Performance Issues發(fā)現(xiàn)頁(yè)面上一堆高亮的touch事件時(shí),可以考慮touch-action:auto來(lái)去除。

    具體的優(yōu)化可能得根據(jù)實(shí)際情況去處理,哪里有問(wèn)題優(yōu)化哪里,取得一個(gè)平衡即可。

  • Highlight ad frames 高亮用于廣告的iframe(試了下,谷歌的推廣廣告識(shí)別沒問(wèn)題,百度的沒測(cè))。

  • Hit-test borders 展示點(diǎn)擊測(cè)試的區(qū)域。(雞肋,請(qǐng)忘記)。

  • Emulate CSS media type 模擬媒體查詢是打印還是終端屏幕。

  • Emulate CSS media feature prefers-color-scheme 模擬媒體查詢的系統(tǒng)主題,具體參考prefers-color-scheme。

  • Emulate CSS media feature prefers-reduced-momition 模擬媒體查詢的開啟動(dòng)畫減弱功能,具體參考prefers-reduced-motion。

保留頁(yè)面控制臺(tái)記錄和網(wǎng)絡(luò)請(qǐng)求記錄

Chrome的Console面板和Network面板都有Preserve Log這個(gè)選項(xiàng),當(dāng)勾選了這個(gè)選項(xiàng)后,會(huì)保留當(dāng)前選項(xiàng)卡的控制臺(tái)和請(qǐng)求記錄。

對(duì)于涉及到多個(gè)頁(yè)面間跳轉(zhuǎn)的問(wèn)題,這個(gè)功能很有幫助。

切換控制臺(tái)的執(zhí)行環(huán)境(iframe中運(yùn)行腳本)

Console面板上面有個(gè)名為Javascript contexts的選擇器,一般值默認(rèn)為top。

top表示當(dāng)前執(zhí)行環(huán)境為當(dāng)前頁(yè)面,而如果想切換到當(dāng)前頁(yè)面各個(gè)iframe,就需要進(jìn)行相應(yīng)切換。

比如,在博客園首頁(yè),我們可以切換到各個(gè)廣告iframe的運(yùn)行環(huán)境。

與此相關(guān)的一個(gè)功能是,只輸出所選運(yùn)行環(huán)境的打印日志:

點(diǎn)擊右上角齒輪打開控制臺(tái)設(shè)置,勾選Selected context only即可。

控制臺(tái)的實(shí)時(shí)表達(dá)式

在控制臺(tái)面板有個(gè)眼睛一樣的圖標(biāo),名為:Create live express(創(chuàng)建實(shí)時(shí)表達(dá)式)。

點(diǎn)擊它創(chuàng)建一個(gè)入上圖紅框所示的小面板。

輸入表達(dá)式可以自動(dòng)監(jiān)控這個(gè)表達(dá)式。

比如如果實(shí)時(shí)表達(dá)式為a,如果a的值變動(dòng)了,那么這個(gè)實(shí)時(shí)表達(dá)式的值也會(huì)變動(dòng)。

控制臺(tái)的API

我這里直接給開發(fā)者文檔的地址了,畢竟有點(diǎn)多,建議了解一下,知道有哪些功能即可。

比如monitor(監(jiān)聽函數(shù)執(zhí)行)和monitorEvent(監(jiān)聽事件)還是有些用處的。

文檔地址為:API列表工具API列表。

可重復(fù)執(zhí)行的控制臺(tái)腳本片段

如果您在調(diào)試BUG時(shí)總是在控制臺(tái)多次重復(fù)執(zhí)行大段的相同的JS代碼。

那么您可以考慮用Snippet(片段)。

這個(gè)東西雖然作用于控制臺(tái),但是卻不是在Console面板,而是在Source面板。

如圖所示,我們通過(guò)點(diǎn)擊New snippet新建了一個(gè)叫TestSnippet的代碼片段。

然后我們可以點(diǎn)擊右下角的運(yùn)行或者用Ctrl+Enter在控制臺(tái)運(yùn)行這段代碼片段。

XHR/Fetch 斷點(diǎn)

Sources面板,右側(cè)會(huì)顯示XHR/fetch Breakpoints

點(diǎn)擊加號(hào),可以輸入字符,如果輸入mynameis,那么就會(huì)在ajax請(qǐng)求或者fetch請(qǐng)求的URI包含mynameis時(shí)斷下。

如果不填,那么也會(huì)新增一行,表示斷下所有的ajax請(qǐng)求和fetch請(qǐng)求。

事件偵聽器斷點(diǎn)

Sources面板,右側(cè)會(huì)顯示Event Listener Breakpoints

顧名思義,用來(lái)給相應(yīng)事件打斷點(diǎn)的。

這里基本上收錄了所有的事件,連WebAudio,Worker,Timer的都有。

異常斷點(diǎn)

同樣在Sources面板右側(cè)會(huì)顯示異常斷點(diǎn)的圖標(biāo):

激活后可以在各個(gè)未捕獲的異常處斷下,激活后還可以通過(guò)進(jìn)一步勾選 Pause on caught exceptions在已捕獲的異常處也斷下。

腳本黑盒化(Blackbox script)

Source面板,選中某js腳本文件后右鍵,或者在調(diào)試的堆棧中右鍵,都會(huì)出現(xiàn)一個(gè)Blackbox script選項(xiàng)。

點(diǎn)擊這個(gè)選項(xiàng),可以讓我們?cè)谡{(diào)試時(shí)認(rèn)為此腳本總是對(duì)的,忽略此腳本,不論是調(diào)試過(guò)程或者堆棧都不會(huì)進(jìn)入這個(gè)腳本。

一般用來(lái)黑盒化一些js庫(kù),比如jQuery或者lodash之類的。

網(wǎng)絡(luò)面板的截圖功能

Network面板中有個(gè)截屏功能,開啟之后再重新加載頁(yè)面,就會(huì)如下圖顯示各個(gè)時(shí)間段下的截圖。

雙擊這些縮略圖,可以放大查看當(dāng)時(shí)頁(yè)面的具體樣子。

單擊縮略圖,可以顯示當(dāng)前縮略圖時(shí)間點(diǎn)前發(fā)送的所有請(qǐng)求。

網(wǎng)絡(luò)面板關(guān)于網(wǎng)絡(luò)請(qǐng)求的一些優(yōu)化

同域名請(qǐng)求數(shù)量限制(HTTP/1.0或HTTP/1.1)

如果網(wǎng)絡(luò)請(qǐng)求出現(xiàn)排隊(duì)的情況,那么說(shuō)明是在單個(gè)域上提出了太多請(qǐng)求。

在HTTP/1.0或HTTP/1.1連接上,Chrome每個(gè)主機(jī)最多允許六個(gè)同步TCP連接。

想要優(yōu)化這一點(diǎn),可以將關(guān)鍵請(qǐng)求提前,不關(guān)鍵請(qǐng)求延后。

如果都是關(guān)鍵請(qǐng)求,那么可以嘗試使用HTTP 2。(在Network面板可以展示Protocol顯示)

如果條件有限,可以將這些請(qǐng)求放在不同的域名上,然后用nginx指向同一個(gè)源頭,這樣同樣可以解決這個(gè)問(wèn)題

請(qǐng)求第一個(gè)字節(jié)的時(shí)間過(guò)長(zhǎng) Time To First Byte (TTFB)

我們查看一下博客園首頁(yè)的請(qǐng)求。

可以看見每個(gè)請(qǐng)求后面都有一個(gè)綠色的區(qū)域,這個(gè)綠色區(qū)域表示每個(gè)請(qǐng)求的Time To First Byte (TTFB),即請(qǐng)求第一個(gè)字節(jié)的時(shí)間。

點(diǎn)開一個(gè)具體的請(qǐng)求,看一下:

通常原因是瀏覽器與服務(wù)端的請(qǐng)求連接速度很慢,或者服務(wù)端的請(qǐng)求響應(yīng)過(guò)慢。

簡(jiǎn)單來(lái)說(shuō),就是網(wǎng)絡(luò)連接慢,或者是服務(wù)端代碼寫得太辣雞。

如果是網(wǎng)絡(luò)連接慢,可以用CDN,或者換個(gè)近一些的服務(wù)器。

如果是服務(wù)端響應(yīng)慢,那么可以考慮緩存,或者優(yōu)化接口,那就是服務(wù)端的事情了。

內(nèi)容下載慢

這里直接用Chrome官網(wǎng)的圖片吧:

一般表現(xiàn)于請(qǐng)求的下載時(shí)間過(guò)長(zhǎng),也就是請(qǐng)求后面跟著的藍(lán)條。

原因基本上就是js或者其它的一些資源文件太大了,導(dǎo)致下載過(guò)慢。

因?yàn)橛玫氖?00M的網(wǎng),所以我比較難找這樣的例子,不過(guò)用瀏覽器的模擬3G網(wǎng)的話,其實(shí)博客園很多那種二次元風(fēng)格,自帶一張二次元大背景的博客都會(huì)出現(xiàn)這種現(xiàn)象。

這種建議將圖片尺寸壓縮一下。

網(wǎng)絡(luò)面板時(shí)間分解階段說(shuō)明

這里列出Timing選項(xiàng)卡可以看到的各個(gè)時(shí)間階段:

  • Queueing(排隊(duì)):瀏覽器在以下情況下將請(qǐng)求排隊(duì):
    • 有更高優(yōu)先級(jí)的請(qǐng)求。
    • 已為該來(lái)源打開了六個(gè)TCP連接。僅適用于HTTP/1.0和HTTP/1.1。
    • 瀏覽器正在磁盤緩存中短暫分配空間
  • Stalled:出于Queueing中描述的任何原因,該請(qǐng)求都可能被暫停
  • DNS Lookup:瀏覽器正在解析請(qǐng)求的IP地址
  • Proxy negotiation:瀏覽器正在與代理服務(wù)器協(xié)商請(qǐng)求
  • Request sent:請(qǐng)求發(fā)送時(shí)間
  • ServiceWorker Preparation:瀏覽器正在啟動(dòng)service worker
  • Request to ServiceWorker:請(qǐng)求發(fā)送到service worker的時(shí)間
  • Waiting (TTFB): 瀏覽器等待第一個(gè)字節(jié)響應(yīng)的時(shí)間
  • Content Download:響應(yīng)內(nèi)容下載時(shí)間
  • Receiving Push:瀏覽器正在通過(guò)HTTP/2服務(wù)器推送接收此響應(yīng)的數(shù)據(jù)
  • Reading Push: 瀏覽器正在讀取先前接收的本地?cái)?shù)據(jù)。

查看請(qǐng)求的依賴關(guān)系

各個(gè)請(qǐng)求都有著它們各自的依賴關(guān)系,最常見的是圖片、js和css依賴html請(qǐng)求。

只有在html請(qǐng)求完畢才會(huì)在上面慢慢加載這些資源文件。

同樣以博客園為例:

我們按住Shift,鼠標(biāo)浮動(dòng)到analytics.js這個(gè)請(qǐng)求上,可以看到www.cnblogs.com那個(gè)請(qǐng)求變綠了,collect那個(gè)請(qǐng)求變紅了。

這個(gè)表示analytics.js這個(gè)請(qǐng)求,依賴于www.cnblogs.com,而collect這個(gè)請(qǐng)求依賴于analytics.js。

WebSocket消息的監(jiān)控

如下圖:

我們通過(guò)Network面板上的類型篩選到WebSocket請(qǐng)求,點(diǎn)開這個(gè)請(qǐng)求,我們可以看到相應(yīng)的消息。

Audit面板

關(guān)于Audit面板這里不講使用方法,主要是太多了。

但是這個(gè)東西確實(shí)很方便,這里是:參考文檔。

這里要說(shuō)的是這個(gè)東西需要FQ,如果翻不了,可以裝個(gè)LightHouse的擴(kuò)展插件,如果下不了或者不想更新麻煩,有個(gè)更好的辦法。

使用微軟的Edge,基于Chromium的那個(gè),然后在它的商店裝個(gè)SiteTool的擴(kuò)展插件即可。

Performance面板性能分析

Performance面板主要是用來(lái)分析運(yùn)行時(shí)的性能。加載的用Audit即可。

關(guān)于怎么使用這里就太多了,咱們先挑最簡(jiǎn)單的一個(gè)流程來(lái)講。

我們首先看一下一個(gè)性能良好的結(jié)果圖:

然后我們?cè)賹PU變慢6倍,再看一下性能不好的結(jié)果圖:

FPS概覽

對(duì)比第一張圖,我們發(fā)現(xiàn)第二張圖關(guān)于FPS那一行出現(xiàn)了很多紅色,并且綠色的高度明顯降低。

這表示它的FPS值很低,一般給用戶的感受就是很卡。出現(xiàn)了紅色表示會(huì)影響到用戶體驗(yàn)。

CPU概覽

同時(shí)我們?cè)賹?duì)比上面兩張圖,發(fā)現(xiàn)第一張圖的CPU那行顏色區(qū)域都很低,而第二張圖CPU那塊都占滿了,這表示CPU占用率高。

FPS詳情

我們之前只是對(duì)哪個(gè)時(shí)間段的FPS低有了一個(gè)大致的了解,如果我們想要了解具體的情況,我們可以將鼠標(biāo)浮動(dòng)到Frames那一行,這樣可以了解到具體的幀的FPS。

同樣點(diǎn)擊選中那一幀,還可以在下方的摘要(Summary)中查看具體的情況。

CPU工作詳情

選中Main那一行,下方的摘要就會(huì)顯示主線程CPU各個(gè)活動(dòng)的耗時(shí)。

但是即使如此,可能您也只能知道大致是哪個(gè)階段出了問(wèn)題,比如渲染還是腳本執(zhí)行時(shí)間過(guò)長(zhǎng)。

如果想要快速定位,您可以展開Main查看具體的工作詳情。

在Main那一行的展開詳情中,可能會(huì)出現(xiàn)一些紅色的三角符號(hào)或者紅色區(qū)塊,點(diǎn)擊選中之后會(huì)有相應(yīng)的優(yōu)化提示,下方摘要也會(huì)展示出來(lái)。

比如上圖中就是因?yàn)閺?qiáng)制回流導(dǎo)致的性能瓶頸。

可以看一下摘要中紅框中的鏈接,很方便地告訴了我們到底是哪段代碼出了問(wèn)題,點(diǎn)擊進(jìn)去:

我們可以發(fā)現(xiàn)是調(diào)用了offsetTop導(dǎo)致的回流,然后優(yōu)化這部分代碼即可。

至于具體的優(yōu)化我們這里就不講了,關(guān)于性能優(yōu)化可以參考一下:Web Fundamentals的Performance。

關(guān)于更多性能面板的介紹可以看下:如何使用TimelineTimeline事件參考

這里說(shuō)個(gè)小技巧,在Timeline上可以按Ctrl+F,然后搜索事件,這樣可以在大量的事件中快速定位想找的事件。

JavaScript分析器

還是More tools中打開JavaScript Profiler面板,怎么打開這里不講了,操作好多遍了。

然后記錄下頁(yè)面一段時(shí)間的js執(zhí)行情況。

我們看到的上圖就是記錄結(jié)果,默認(rèn)是分析模式是Heavy (Bottom Up)。

這個(gè)模式下可以看到哪些函數(shù)對(duì)性能影響最大并能夠檢查這些函數(shù)的調(diào)用路徑。

分析模式有下面三種:

  • Chart。顯示按時(shí)間順序排列的火焰圖
  • Heavy (Bottom Up)。按照函數(shù)對(duì)性能的影響列出函數(shù),讓您可以檢查函數(shù)的調(diào)用路徑
  • Tree (Top Down)。顯示調(diào)用結(jié)構(gòu)的總體狀況,從調(diào)用堆棧的頂端開始。

Heavy (Bottom Up)Tree (Top Down)比較簡(jiǎn)單,這里直接略過(guò)。

Chart的火焰圖如下:

火焰圖越高的部分表示函數(shù)調(diào)用的堆棧越高,但是高度并不代表什么。

這樣看圖肯定是看不出來(lái)什么,所以我們需要選中一塊區(qū)域放大,如下圖:

色塊越寬表示該函數(shù)的執(zhí)行時(shí)間越長(zhǎng),而這個(gè)才表示該函數(shù)可能需要優(yōu)化。

鼠標(biāo)浮動(dòng)到色塊上可以看到函數(shù)執(zhí)行的具體信息,這里只說(shuō)幾個(gè)重要的點(diǎn):

  • Name。函數(shù)的名稱。
  • Self time。完成函數(shù)當(dāng)前的調(diào)用所需的時(shí)間,僅包含函數(shù)本身的聲明,不包含函數(shù)調(diào)用的任何函數(shù)。
  • Total time。完成此函數(shù)和其調(diào)用的任何函數(shù)當(dāng)前的調(diào)用所需的時(shí)間。
  • URL。函數(shù)在哪個(gè)腳本中,并且它的行號(hào)。
  • Aggregated self time。記錄中函數(shù)所有調(diào)用的總時(shí)間,不包含此函數(shù)調(diào)用的函數(shù)。
  • Aggregated total time。函數(shù)所有調(diào)用的總時(shí)間,包含此函數(shù)調(diào)用的函數(shù)。
  • Not optimized。如果分析器已檢測(cè)出函數(shù)存在優(yōu)化可能,會(huì)在此處列出。

點(diǎn)擊相應(yīng)色塊可以進(jìn)到具體的函數(shù)中查看。

Memory面板

Memory面板主要用來(lái)監(jiān)控頁(yè)面的內(nèi)存使用情況,并解決一些內(nèi)存泄漏或者頻繁的垃圾回收等問(wèn)題。

Heap snapshot(堆快照)

使用堆快照一般用來(lái)解決內(nèi)存泄漏的問(wèn)題。

我們?cè)趦?nèi)存面板Take snapshot之后,可以看到這樣一個(gè)畫面:

然后我們?cè)谏戏捷斎?strong>Detached,會(huì)篩選出下面的結(jié)果:

這里可以看看到底是哪些DOM節(jié)點(diǎn)沒有釋放。

官網(wǎng)文檔上顯示如果DOM節(jié)點(diǎn)沒有被引用,那么應(yīng)該是紅色的,但是實(shí)際上不是如此。

不過(guò)這個(gè)功能還是有些用處的,選中相應(yīng)的節(jié)點(diǎn)可以看看到底是哪些變量引用了,然后看是否能消除這些變量。

這里得注意圖中的Shallow Size表示對(duì)象自身占用內(nèi)存的大小,Retained Size表示通過(guò)保持對(duì)其他對(duì)象的引用隱式占用的總內(nèi)存大小,而Distance是對(duì)象到GC roots(如window或者DOM樹)的距離。

Allocation instrumentation on timeline(時(shí)間線上的內(nèi)存分配工具)

翻譯起來(lái)有點(diǎn)繞口,實(shí)際上就是一個(gè)用來(lái)按時(shí)間查看內(nèi)存分配情況的工具。

我們直接看一下檢測(cè)結(jié)果:

我們可以看到時(shí)間軸上有不少柱子,這些柱子高度會(huì)變,表示所在的那個(gè)點(diǎn)分配的對(duì)象大小。

我們可以看到圖中我們選中的那個(gè)時(shí)間點(diǎn)分配的內(nèi)存大概為384byte,旁邊那個(gè)100B是一個(gè)參照線。

柱子的顏色代表這些對(duì)象是否被回收了,藍(lán)色代表還存在,灰色代表被回收了。

Application面板

這個(gè)面板內(nèi)容多,但是簡(jiǎn)單易懂,本來(lái)想著寫點(diǎn)的,太簡(jiǎn)單就算了。

主要就是關(guān)于存儲(chǔ)和緩存的。

除此之外,就是有個(gè)關(guān)于PWA的調(diào)試,這里可以參考:調(diào)試 Progressive Web App。

我對(duì)這個(gè)涉獵較少,就不班門弄斧了。

Security面板

這個(gè)面板主要是看是否https的,有用的時(shí)候是有用,沒用的時(shí)候是真沒用。

總結(jié)

學(xué)習(xí)Chrome開發(fā)者工具不僅能提高我們工具的使用效率,這其中涉及到的很多前端知識(shí)點(diǎn)也能令人眼界大開。

在閱讀Chrome的開發(fā)者工具文檔時(shí)有很多缺失和不同步,這是因?yàn)樗诓粩嗟匮葸M(jìn),包括我現(xiàn)在提到的一些功能也許在將來(lái)有一天就消失或者增強(qiáng)了。

所以我覺得對(duì)于這份指南您可以當(dāng)做一份索引,有所了解,但不必記住,只要在遇到問(wèn)題的時(shí)候能記起來(lái)我可以用什么工具來(lái)處理就夠了。

希望這篇博客能幫助到您,也希望您能對(duì)疏漏之處指正一二。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多