欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

利用 Chrome Dev Tools 進(jìn)行頁(yè)面性能分析的步驟說(shuō)明(前端性能優(yōu)化)

 更新時(shí)間:2021年02月24日 11:51:50   作者:小蚊  
這篇文章主要介紹了利用 Chrome Dev Tools 進(jìn)行頁(yè)面性能分析的步驟說(shuō)明(前端性能優(yōu)化),本文給大家介紹的非常想詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

背景

我們經(jīng)常使用 Chrome Dev Tools 來(lái)開發(fā)調(diào)試,但是很少知道怎么利用它來(lái)分析頁(yè)面性能,這篇文章,我將詳細(xì)說(shuō)明怎樣利用 Chrome Dev Tools 進(jìn)行頁(yè)面性能分析及性能報(bào)告數(shù)據(jù)如何解讀。

分析面板介紹

上圖是 Chrome Dev Tools 的一個(gè)截圖,其中,我認(rèn)為能用于進(jìn)行頁(yè)面性能快速分析的主要是圖中圈出來(lái)的幾個(gè)模塊功能,這里簡(jiǎn)單介紹一下:

  • Network : 頁(yè)面中各種資源請(qǐng)求的情況,這里能看到資源的名稱、狀態(tài)、使用的協(xié)議(http1/http2/quic...)、資源類型、資源大小、資源時(shí)間線等情況
  • Performance : 頁(yè)面各項(xiàng)性能指標(biāo)的火焰圖,這里能看到白屏?xí)r間、FPS、資源加載時(shí)間線、longtask、內(nèi)存變化曲線等等信息
  • Memory : 可以記錄某個(gè)時(shí)刻的頁(yè)面內(nèi)存情況,一般用于分析內(nèi)存泄露
  • JavaScript Profiler : 可以記錄函數(shù)的耗時(shí)情況,方便找出耗時(shí)較多的函數(shù)
  • Layers : 展示頁(yè)面中的分層情況

分析步驟說(shuō)明

首先,我們?cè)诜治龅臅r(shí)候,建議使用隱身模式打開頁(yè)面,排除一些插件等因素對(duì)頁(yè)面性能情況的影響。然后,我們把頁(yè)面緩存勾選去掉,要測(cè) disable cache 的情況,再把網(wǎng)絡(luò)情況調(diào)整一下,我們用電腦打開頁(yè)面的時(shí)候一般都連著 wifi 等,要更真實(shí)一些去測(cè)頁(yè)面的性能,還是把網(wǎng)絡(luò)調(diào)到 3G 等情況比較好,如圖:

調(diào)整好之后,我們切到 Performance 面板,這里先說(shuō)明一下一些按鈕的作用:

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

  • 手動(dòng)開始記錄,開始后需要手動(dòng)結(jié)束
  • 自動(dòng)重啟頁(yè)面,并記錄整個(gè)頁(yè)面加載的過(guò)程。這個(gè)是最常用的,一般大概分析頁(yè)面性能的時(shí)候都是點(diǎn)這個(gè)就夠了
  • 清除性能錄制的記錄
  • 上傳頁(yè)面性能錄制的數(shù)據(jù)
  • 下載頁(yè)面性能錄制的數(shù)據(jù)
  • 選擇要展示的性能記錄。你可能進(jìn)行了多次分析,這里可以切換去看每次的結(jié)果
  • 是否捕捉頁(yè)面加載過(guò)程的截圖,這個(gè)一般都要勾選
  • 是否記錄內(nèi)存變化,這個(gè)一般都要勾選
  • 垃圾回收,點(diǎn)擊了即進(jìn)行一次垃圾回收

這里,我以京東的一個(gè)頁(yè)面為例,勾選 disable cache,網(wǎng)絡(luò)情況為 Fast 3G,來(lái)說(shuō)明一下,應(yīng)該如何理解性能結(jié)果,找出優(yōu)化點(diǎn)。

從網(wǎng)絡(luò)面板分析

我們來(lái)看看網(wǎng)絡(luò)面板,看看都有哪些信息。如下圖所示:

從圖中可以看出,頁(yè)面中有的一些性能優(yōu)化手段有:

  • 頁(yè)面直出,輸入https://wq.jd.com/wxportal/index_v6 ,頁(yè)面加載回來(lái)的 document 就是一個(gè)渲染好的 html 頁(yè)面
  • 圖片優(yōu)化,部署在不同的CDN域名下,用webp/dpg等格式圖片,圖片切割等
  • http 協(xié)議有部分采用 http2,多路復(fù)用,加快資源加載
  • 小 logo 使用base42來(lái)處理
  • 按需加載,菜單先加載第一屏的圖標(biāo),滑動(dòng)到第二屏?xí)r再加載第二屏的圖標(biāo)

而從圖片,個(gè)人認(rèn)為,還可以考慮用上的一些性能優(yōu)化手段有:

  • html 的大小為138kb,Content Download的時(shí)間為七百多毫秒,感覺(jué)可以拆分一下頁(yè)面,非一二屏的內(nèi)容分開加載。
  • TTFB(Time To First Byte)為五百多毫秒,在下載第一個(gè)字節(jié)之前等待的時(shí)間過(guò)久,不過(guò)這里主要是用戶網(wǎng)絡(luò)情況影響,可以做的比較少。如DNS解析優(yōu)化,減少后端服務(wù)處理時(shí)間等
  • 合并雪碧圖,大輪播圖下面的菜單分類那里的圖標(biāo),可以用一張雪碧圖來(lái)集合這些圖標(biāo)
  • 頂部輪播圖,在首次加載時(shí),可以先加載第一幀的圖片,后面幾幀延后一下
  • 圖片較多,可以的話,都用 http2 協(xié)議

從性能面板分析

切到 Performance 面板,點(diǎn)擊自動(dòng)重啟頁(yè)面,并記錄整個(gè)頁(yè)面加載的過(guò)程,然后來(lái)分析結(jié)果~​

網(wǎng)絡(luò)&&白屏

性能面板,有很多很多的參數(shù),我們要看一些比較常見的。首先看白屏?xí)r間和網(wǎng)絡(luò)加載情況,如下圖:

上圖,我們可以看幾點(diǎn)信息:

  • 本次頁(yè)面加載的白屏?xí)r間約為 1000 ms
  • FPS 曲線沒(méi)有標(biāo)紅,如果有很多標(biāo)紅的則說(shuō)明頁(yè)面存在渲染卡頓多的地方
  • 從網(wǎng)絡(luò)資源加載情況來(lái)看,圖片沒(méi)有啟用 http2,因此每次可以同時(shí)加載的圖片數(shù)有限,未被加載的圖片有等待過(guò)程
  • 資源的加載時(shí)間也可以看到,比如輪播的背景圖加載了近 700 毫秒,時(shí)間有點(diǎn)長(zhǎng)

另外,我們可以看一下資源加載有沒(méi)有空白期,雖然上圖沒(méi)有,但是如果資源加載之間存在空白期,說(shuō)明沒(méi)有充分利用資源加載的空閑時(shí)間,可以調(diào)整一下。

火焰圖

火焰圖,主要在 Main 面板中,是我們分析具體函數(shù)耗時(shí)最??吹拿姘澹覀儊?lái)看一下,如圖:

首先,面板中會(huì)有很多的 Task,如果是耗時(shí)長(zhǎng)的 Task,其右上角會(huì)標(biāo)紅(圖中沒(méi)有,說(shuō)明頁(yè)面首屏的邏輯處理分配得還不錯(cuò)),這個(gè)時(shí)候,我們可以選中標(biāo)紅的 Task (這里就隨手選中一個(gè)),然后放大(選中,滑動(dòng)鼠標(biāo)可放大),看其具體的耗時(shí)點(diǎn)。

放大后,這里可以看到都在做哪些操作,哪些函數(shù)耗時(shí)了多少,這里代碼有壓縮,看到的是壓縮后的函數(shù)名。然后我們點(diǎn)擊一下某個(gè)函數(shù),在面板最下面,就會(huì)出現(xiàn)代碼的信息,是哪個(gè)函數(shù),耗時(shí)多少,在哪個(gè)文件上的第幾行等。這樣我們就很方便地定位到耗時(shí)函數(shù)了。

還可以橫向切換 tab ,看它的調(diào)用棧等情況,更方便地找到對(duì)應(yīng)代碼。具體大家可以試試~

時(shí)間線&&內(nèi)存情況

在 Timings 的區(qū)域,我們可以看到本次加載的一些關(guān)鍵時(shí)間,分別有:

  • FCP: First Contentful Paint
  • LCP: Largest Contentful Paint
  • FMP: First Meaningful Paint
  • DCL: DOMContentLoaded Event
  • L: Onload Event

我們可以選區(qū)(選擇從白屏到有內(nèi)容的區(qū)域,代表本次的頁(yè)面加載過(guò)程),可以對(duì)照著看一下上面的時(shí)間,截圖如下:

另外,我們可以看到頁(yè)面中的內(nèi)存使用的情況,比如 JS Heap(堆),如果曲線一直在增長(zhǎng),則說(shuō)明存在內(nèi)存泄露,從圖中可以看出,相當(dāng)長(zhǎng)的一段時(shí)間,內(nèi)存曲線都是沒(méi)有下降的,這里是有發(fā)生內(nèi)存泄露的可能的,在 Onload 之后,內(nèi)存才得到釋放。更多內(nèi)存泄露產(chǎn)生的原因及分析方法,可以參照我的這篇文章《Chrome 瀏覽器垃圾回收機(jī)制與內(nèi)存泄漏分析

最下方就是頁(yè)面的一個(gè)整理耗時(shí)概況,如果 Scripting 時(shí)間過(guò)長(zhǎng),則說(shuō)明 js執(zhí)行的邏輯太多,可以考慮優(yōu)化js,如果渲染時(shí)間過(guò)長(zhǎng),則考慮優(yōu)化渲染過(guò)程,如果空閑時(shí)間過(guò)多,則可以考慮充分利用起來(lái),比如把一些上報(bào)操作放到頁(yè)面空閑時(shí)間再上報(bào)等。

其他面板

以上就是性能面板可以看的一些信息。另外,我們可以借助 Layers面板來(lái)查看頁(yè)面分層情況的3D視圖,Rendering面板(點(diǎn)擊more tools->Rendering即可打開),勾選Layer Bordersk可以看到復(fù)合層、RenderLayer區(qū)域,可以幫助分析動(dòng)畫卡頓、是否開啟GPU加速等問(wèn)題,而 Memory 面板 和 JavaScript Profiler 面板主要是分析內(nèi)存泄露的,這里就不說(shuō)了,可以看我另一篇文章《Chrome 瀏覽器垃圾回收機(jī)制與內(nèi)存泄漏分析

用Audits工具分析

Audits 其實(shí)就是 LightHouse,LightHouse 是Google開源的一個(gè)自動(dòng)化測(cè)試工具,它通過(guò)一系列的規(guī)則來(lái)對(duì)網(wǎng)頁(yè)進(jìn)行評(píng)估分析,最終給出一份評(píng)估報(bào)告。它的面板是這樣的:

整體情況

Audits主要從5個(gè)方面來(lái)給網(wǎng)頁(yè)打分,當(dāng)然你也可以去掉某些方面的評(píng)估。在選擇了設(shè)備、評(píng)估方面、網(wǎng)絡(luò)情況等選項(xiàng)后,點(diǎn)擊 Run Audits ,我們將會(huì)得到一份報(bào)告。

上圖是一個(gè)總體報(bào)告,可以看出,這個(gè)頁(yè)面的性能不太合格。當(dāng)然一次的測(cè)試也說(shuō)明不了什么問(wèn)題,只能做個(gè)參考。我們看它的性能指標(biāo)分別有:

  • First Contentful Paint:內(nèi)容首次開始繪制。
  • First Meaningful Paint:可以簡(jiǎn)單理解為用戶看到網(wǎng)頁(yè)主要內(nèi)容的時(shí)間,分?jǐn)?shù)越低,頁(yè)面顯示其主要內(nèi)容的速度就越快。圖中例子,網(wǎng)頁(yè)首次有效繪制時(shí)間為2.5s。
  • Speed Index:速度指標(biāo)是一個(gè)頁(yè)面加載性能指標(biāo),向你展示明顯填充頁(yè)面內(nèi)容的速度,此指標(biāo)的分?jǐn)?shù)越低越好。
  • First CPU Idle:首次 CPU 空閑時(shí)間
  • Time to Interactive:可互動(dòng)時(shí)間,頁(yè)面中的大多數(shù)網(wǎng)絡(luò)資源完成加載并且CPU在很長(zhǎng)一段時(shí)間都很空閑的所需的時(shí)間。此時(shí)可以預(yù)期cpu非??臻e,可以及時(shí)的處理用戶的交互操作。
  • Max Potential First Input Delay:最大的輸入延遲時(shí)間,輸入響應(yīng)能力對(duì)用戶如何看待你應(yīng)用的性能起著關(guān)鍵作用。應(yīng)用有 100 毫秒的時(shí)間響應(yīng)用戶輸入。如果超過(guò)此時(shí)間,用戶就會(huì)認(rèn)為應(yīng)用反應(yīng)遲緩。

這些時(shí)間,都可以點(diǎn)擊圖中紅框切換展示方式,會(huì)附上對(duì)應(yīng)的時(shí)間解釋,然后可以點(diǎn)擊 Learn more 來(lái)查看詳細(xì)的指標(biāo)介紹。在文檔中,每一項(xiàng)指標(biāo)都會(huì)明確的分為三個(gè)部分:為什么說(shuō)此審查非常重要;如何通過(guò)此審查;如何實(shí)現(xiàn)此審查;

性能指標(biāo)優(yōu)化建議解讀

性能建議主要分為3類, Opportunities 可優(yōu)化項(xiàng)、手動(dòng)診斷項(xiàng)、通過(guò)的審查項(xiàng)。本次的例子如下圖:

圖中的每一項(xiàng)都可以展開來(lái)看明細(xì)解釋,其中:

可優(yōu)化項(xiàng)有2個(gè)建議:

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

這項(xiàng)里面的內(nèi)容指的是LightHouse發(fā)現(xiàn)的一些可以直接優(yōu)化的點(diǎn),你可以對(duì)應(yīng)這些點(diǎn)來(lái)進(jìn)行優(yōu)化。

手動(dòng)診斷項(xiàng)有6個(gè)建議:

  • 最小化主線程工作
  • 減少JavaScript執(zhí)行時(shí)間
  • 避免DOM太大
  • 通過(guò)有效的緩存策略緩存一些靜態(tài)資源
  • 避免鏈接關(guān)鍵請(qǐng)求
  • 保持低請(qǐng)求數(shù)量和小傳輸大小

這些項(xiàng)目表示LightHouse并不能替你決定當(dāng)前是好是壞,但是把詳情列出來(lái),由你手動(dòng)排查每個(gè)項(xiàng)目的情況

通過(guò)的審查項(xiàng)

這里列出的都是做的好的地方,本文例子共有16條,不過(guò)即使做的好,依然值得我們進(jìn)去仔細(xì)看一下,因?yàn)橄袼袟l目一樣,這里的每個(gè)條目也有一個(gè)showmore,我們可以點(diǎn)進(jìn)去仔細(xì)學(xué)習(xí)背后的知識(shí)和原理!

Accessibility輔助功能

輔助功能指的是那些可能超出"普通"用戶范圍之外的用戶的體驗(yàn),他們以不同于你期望的方式訪問(wèn)你的網(wǎng)頁(yè)或進(jìn)行交互,本文的例子建議如下圖:

輔助功能類別測(cè)試屏幕閱讀器的能力和其他輔助技術(shù)是否能在頁(yè)面中正常工作。例如:按元素來(lái)使用屬性,標(biāo)簽使用是否規(guī)范,img 標(biāo)簽是否缺少 alt 屬性,可辨別的元素命名等等。這一項(xiàng)我們不展開講,但是還是建議大家按照審計(jì)建議修改一下網(wǎng)頁(yè)。

其他幾項(xiàng),本文的例子最佳實(shí)踐評(píng)分挺高的,而例子不支持PWA,也不需要考慮SEO,這里就不展開說(shuō)明了,有對(duì)應(yīng)需求的可以自己詳細(xì)看看即可。

總結(jié)

最后總結(jié)一下,我們利用Chrome Dev Tools 進(jìn)行頁(yè)面性能分析有以下指標(biāo)可以參考:

  • 從網(wǎng)絡(luò)面板分析
  • 從性能面板分析
  • 從Memory面板等分析內(nèi)存泄露
  • 用Audits工具分析

而這些分析方法,本文都詳細(xì)寫了??梢哉J(rèn)真看看~

到此這篇關(guān)于利用 Chrome Dev Tools 進(jìn)行頁(yè)面性能分析的步驟說(shuō)明(前端性能優(yōu)化)的文章就介紹到這了,更多相關(guān) Chrome Dev Tools 頁(yè)面性能內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • js實(shí)現(xiàn)跟隨鼠標(biāo)移動(dòng)且?guī)шP(guān)閉功能的圖片廣告實(shí)例

    js實(shí)現(xiàn)跟隨鼠標(biāo)移動(dòng)且?guī)шP(guān)閉功能的圖片廣告實(shí)例

    這篇文章主要介紹了js實(shí)現(xiàn)跟隨鼠標(biāo)移動(dòng)且?guī)шP(guān)閉功能的圖片廣告,實(shí)例分析了javascript操作鼠標(biāo)事件及html元素的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-02-02
  • cocos2dx骨骼動(dòng)畫Armature源碼剖析(二)

    cocos2dx骨骼動(dòng)畫Armature源碼剖析(二)

    本篇主要給大家介紹cocos2dx骨骼動(dòng)畫Armature源碼剖析之flash中數(shù)據(jù)與xml中數(shù)據(jù)關(guān)系,需要的朋友一起來(lái)學(xué)習(xí)吧
    2015-09-09
  • Javascript查看大圖功能代碼實(shí)現(xiàn)

    Javascript查看大圖功能代碼實(shí)現(xiàn)

    這篇文章主要介紹了Javascript查看大圖功能代碼實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-05-05
  • JS限制條件補(bǔ)全問(wèn)題實(shí)例分析

    JS限制條件補(bǔ)全問(wèn)題實(shí)例分析

    這篇文章主要介紹了JS限制條件補(bǔ)全問(wèn)題,涉及javascript數(shù)組、字符串的遞歸、遍歷、排序及正則操作相關(guān)技巧,需要的朋友可以參考下
    2016-12-12
  • js模擬hashtable的簡(jiǎn)單實(shí)例

    js模擬hashtable的簡(jiǎn)單實(shí)例

    本篇文章主要是對(duì)js模擬hashtable的簡(jiǎn)單實(shí)例進(jìn)行了介紹,需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助
    2014-03-03
  • 微信小程序視圖容器(swiper)組件創(chuàng)建輪播圖

    微信小程序視圖容器(swiper)組件創(chuàng)建輪播圖

    這篇文章主要為大家詳細(xì)介紹了微信小程序視圖容器(swiper)組件創(chuàng)建輪播圖,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-08-08
  • 淺析javascript的return語(yǔ)句

    淺析javascript的return語(yǔ)句

    這篇文章主要介紹了javascript的return語(yǔ)句,return語(yǔ)句在js中非常的重要,不僅僅具有返回函數(shù)值的功能,還具有一些特殊的用法,感興趣的小伙伴們可以參考一下
    2015-12-12
  • JavaScript中的二進(jìn)制數(shù)據(jù)處理方法詳解

    JavaScript中的二進(jìn)制數(shù)據(jù)處理方法詳解

    Blob、ArrayBuffer和Buffer是JavaScript中用于表示和操作二進(jìn)制數(shù)據(jù)的三種主要方式,本文將深入探討這些概念,以及它們?nèi)绾卧贘avaScript中使用,需要的可以參考一下
    2023-06-06
  • 深入詳解JS函數(shù)的柯里化

    深入詳解JS函數(shù)的柯里化

    JavaScript作為一種弱類型語(yǔ)言,它的隱式轉(zhuǎn)換是非常靈活有趣的。當(dāng)我們沒(méi)有深入了解隱式轉(zhuǎn)換的時(shí)候可能會(huì)對(duì)一些運(yùn)算的結(jié)果會(huì)感動(dòng)困惑,比如4 + true = 5。當(dāng)然,如果對(duì)隱式轉(zhuǎn)換了解足夠深刻,能夠提高對(duì)js的使用能力。這里分享一下,函數(shù)在隱式轉(zhuǎn)換中的一些規(guī)則
    2021-06-06
  • js用typeof方法判斷undefined類型

    js用typeof方法判斷undefined類型

    js判斷undefined類型,可以使用typeof方法,typeof 返回的是字符串,其中就有一個(gè)是undefined
    2014-07-07

最新評(píng)論