1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        前端性能優(yōu)化之利用 Chrome Dev Tools 進(jìn)行頁面性能分析

        共 4558字,需瀏覽 10分鐘

         ·

        2020-02-07 23:29

        850ab6231ba20c7fa22eb9e99455f3b8.webp背景

        我們經(jīng)常使用 Chrome Dev Tools 來開發(fā)調(diào)試,但是很少知道怎么利用它來分析頁面性能,這篇文章,我將詳細(xì)說明怎樣利用 Chrome Dev Tools 進(jìn)行頁面性能分析及性能報(bào)告數(shù)據(jù)如何解讀。如果你認(rèn)真看了本文,一定能學(xué)會(huì)分析,沒學(xué)會(huì),你來找我~

        分析面板介紹


        39aa0971615271680f112b2d76c4a114.webp

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

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

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

        fb52ea0ffbdd0dc6b521079f1ecb108e.webp

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

        981a997514291f369c806072bb57c5ef.webp

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

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

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

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

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

        a8533b405a6d9bc0e72d2156a82a17ee.webp

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


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

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

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

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

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

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

        73f123129047443d6a27c855f3bb5b86.webp

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


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

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

        火焰圖

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

        e9014537b1ac3373e8fef98fc76ea8a0.webp


        首先,面板中會(huì)有很多的 Task,如果是耗時(shí)長的 Task,其右上角會(huì)標(biāo)紅(圖中沒有,說明頁面首屏的邏輯處理分配得還不錯(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ū)域,代表本次的頁面加載過程),可以對(duì)照著看一下上面的時(shí)間,截圖如下:

        0958f0245e52eb2485fa2ac1437e2174.webp


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


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


        其他面板

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


        用Audits工具分析

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

        ff7653e4b0b9b23617c6f737e4d4e37d.webp


        整體情況

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

        18b4d22c9a0e896e5bd552d2c4a152f8.webp


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

        • First Contentful Paint:內(nèi)容首次開始繪制。
        • First Meaningful Paint:可以簡單理解為用戶看到網(wǎng)頁主要內(nèi)容的時(shí)間,分?jǐn)?shù)越低,頁面顯示其主要內(nèi)容的速度就越快。圖中例子,網(wǎng)頁首次有效繪制時(shí)間為2.5s。
        • Speed Index:速度指標(biāo)是一個(gè)頁面加載性能指標(biāo),向你展示明顯填充頁面內(nèi)容的速度,此指標(biāo)的分?jǐn)?shù)越低越好。
        • First CPU Idle:首次 CPU 空閑時(shí)間
        • Time to Interactive:可互動(dòng)時(shí)間,頁面中的大多數(shù)網(wǎng)絡(luò)資源完成加載并且CPU在很長一段時(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)用戶輸入。如果超過此時(shí)間,用戶就會(huì)認(rèn)為應(yīng)用反應(yīng)遲緩。

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

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

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

        83b924bcbe5ee5841c6edf419a9d3445.webp


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

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

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

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

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

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

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

        通過的審查項(xiàng)

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

        Accessibility輔助功能

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

        6e7720084400387c56089faabb349f5f.webp


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

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

        總結(jié)

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

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

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




        推薦閱讀




        我的公眾號(hào)能帶來什么價(jià)值?(文末有送書規(guī)則,一定要看)

        每個(gè)前端工程師都應(yīng)該了解的圖片知識(shí)(長文建議收藏)

        為什么現(xiàn)在面試總是面試造火箭?

        瀏覽 51
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            操bbbb | 色一级性爱视频免费放国产 | 亚洲欧美精品久久 | 在线观看免费人成视频无码 | 国产老熟女性爱视频 | 色噜噜狠狠一区二区三区牛牛影视 | www.伊人.com | 宝贝快在深一点好舒服 | 天天日综合 | 乡下乳妇奶水在线播放 |