<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          當談及 Web 性能優(yōu)化時,我們該關(guān)注哪些性能指標

          共 3989字,需瀏覽 8分鐘

           ·

          2021-09-16 22:10

          點擊上方 三分鐘學前端,關(guān)注公眾號

          回復交流,加入前端編程面試算法每日一題群


          面試官也在看的前端面試資料

          前端頁面性能是影響用戶體驗的關(guān)鍵因素,用戶打開網(wǎng)站時間太久、白屏時間過長、操作卡頓等,都會導致用戶離開頁面,嚴重影響用戶的留存率。Google DoubleClick 研究表明:如果一個移動端頁面加載時長超過 3 秒,用戶就會放棄而離開。BBC 發(fā)現(xiàn)網(wǎng)頁加載時長每增加 1 秒,用戶就會流失 10%。

          那么,如何去計算頁面的性能,以便于更好地衡量和改進前端頁面性能,這就需要前端性能指標,本文簡單介紹每一種性能指標的定義,旨在幫助你理解性能指標,具體優(yōu)化及詳細解讀將在后面章節(jié)中介紹

          性能指標

          以下分為三個過程來看性能指標:

          • 文檔加載過程
          • 文檔渲染呈現(xiàn)過程
          • 交互過程

          文檔加載過程

          下圖是 W3C 的 Navigation Timing 的處理模型,從當前瀏覽器窗口卸載舊頁面開始,到新頁面加載完成,整個過程一共被切分為 9 個小塊:

          • 提示卸載舊文檔
          • 重定向/卸載
          • 應用緩存
          • DNS 解析
          • TCP 握手
          • HTTP 請求處理
          • HTTP 響應處理
          • DOM 處理
          • 文檔裝載完成

          每個小塊,取 Unix 時間戳,兩兩事件之間計算時間差,從而獲取中間過程的耗時(精確到毫秒級別)。

          解讀

          文檔加載過程主要包含以下 幾個性能指標:

          TTFB

          Time to First Byte,是發(fā)出頁面請求到接收到應答數(shù)據(jù)第一個字節(jié)所花費的毫秒數(shù),這個時間段內(nèi)包括 DNS 查找、TCP 連接和 SSL 連接

          TTFB 不僅僅是在服務(wù)器上花費的時間,還包括設(shè)備請求發(fā)送到服務(wù)器,再從服務(wù)器返回到設(shè)備的時間,它計算的是整個延遲的往返時間。

          DCL

          DOMContentLoaded,下圖更直觀的表示下

          什么是 DOMContentLoaded?

          首先我們先思考一下,如何衡量網(wǎng)頁的加載性能?有人認為可以通過計算從空白到完全加載的過程,但其實有些圖片等可能加載較慢,但不影響整個頁面的正常使用,所以,我們僅僅需要在空白網(wǎng)頁看到內(nèi)容即可

          所以,我們也可以通過計算這個網(wǎng)頁從空白到出現(xiàn)內(nèi)容所花費的時間,來衡量網(wǎng)頁文檔的加載性能,那么該如何計算這段時間喃?DOMContentLoaded 就是,當初始的 HTML 文檔被完全加載和解析完成之后,DOMContentLoaded 事件被觸發(fā),而無需等待樣式表、圖像和子框架的完全加載

          L

          Load,onLoad 事件觸發(fā)所需時間,僅在頁面所有資源都加載完畢后(比如圖片,CSS),onLoad 事件才被觸發(fā)

          文檔渲染呈現(xiàn)過程

          FP&FCP

          • FP(First Paint):首次繪制,這個指標用于記錄頁面第一次繪制像素的時間
          • FCP(First Contentful Paint):首次內(nèi)容繪制,這個指標用于記錄頁面首次繪制文本、圖片、非空白 Canvas 或 SVG 的時間,也包括帶有正在加載中的 Web 字體的文本

          這兩個指標看起來大同小異,但是 FP 發(fā)生的時間一定大于等于 FCP,如下圖是掘金的指標:

          FP 指的是繪制像素,比如說頁面的背景色是灰色的,那么在顯示灰色背景時就記錄下了 FP 指標

          但是此時 DOM 內(nèi)容還沒開始繪制,可能需要文件下載、解析等過程,只有當 DOM 內(nèi)容發(fā)生變化才會觸發(fā),比如說渲染出了一段文字,此時就會記錄下 FCP 指標

          我們可以把這兩個指標認為是和白屏時間相關(guān)的指標

          FMP

          First Meaningful Paint,是指頁面的首要內(nèi)容出現(xiàn)在屏幕上的時間,對于不同的站點,首要內(nèi)容是不同的,例如:

          • 博客文章:【大標題 + 首屏文字】是首要內(nèi)容;
          • 百度或 Google 的搜索結(jié)果頁:【首屏的結(jié)果】就是首要內(nèi)容;
          • 淘寶等購物網(wǎng)站:【圖片】會極為重要,因此它是首要內(nèi)容;

          在 Lighthouse 6.0 中已不推薦使用 FMP,建議使用 LCP 代替

          LCP

          Largest Contentful Paint,最大內(nèi)容繪制,用于記錄視窗內(nèi)最大的元素繪制的時間,該時間會隨著頁面渲染變化而變化,因為頁面中的最大元素在渲染過程中可能會發(fā)生改變,另外該指標會在用戶第一次交互后停止記錄。指標變化如下圖:

          LCP 其實能比 FP、FCP、FMP 更能體現(xiàn)一個頁面的性能好壞程度,因為這個指標會持續(xù)更新。舉個例子:當頁面出現(xiàn)骨架屏或者 Loading 動畫時 FCP 其實已經(jīng)被記錄下來了,但此時頁面內(nèi)容其實并未呈現(xiàn)

          在 2.5 秒內(nèi)表示體驗優(yōu)秀

          LCP 目前并不會計算所有元素,因為這樣會使這個指標變得非常復雜,它現(xiàn)在只關(guān)注下面的元素:

          • <img> 元素
          • <image>元素內(nèi)的<svg>元素
          • <video> 元素
          • 通過 url() 函數(shù)加載背景圖片的元素
          • 包含文本節(jié)點或其他內(nèi)聯(lián)文本元素子級的塊級元素。

          SI

          Speed Index,用于度量頁面加載過程中內(nèi)容可視化顯示的速度,是 Lighthouse 的六個度量標準之一

          具體如何測量喃?首先在瀏覽器中捕獲頁面加載的視頻,然后對每 100 毫秒間隔的頁面截圖計算頁面填充的百分比,可以得到這樣一個曲線(縱軸是頁面可視區(qū)域內(nèi)容填充完成度,橫軸是時間)

          上圖中的兩個都是在 10s 時頁面填充完成,但Example 1(左圖)在 2s 是就已經(jīng)填充了 80% 的內(nèi)容,而 Example 2(右圖)在 8s 時才填充 80%

          計算 SI :

          Example 1:Speed Index = (80% * 2) + (20% * 10)= 3.6

          Example 2:Speed Index = (80% * 8) + (20% * 10)= 8.4

          其中,SI:0-3.4 為最優(yōu)

          FSP

          First Screen Paint,即頁面從開始加載到首屏內(nèi)容全部繪制完成的時間,用戶可以看到首屏的全部內(nèi)容

          交互過程

          TTI

          Time to Interactive,用于表示網(wǎng)頁首次完全達到可交互狀態(tài)的時間點

          完全達到可交互狀態(tài)的時間點是從 FCP 開始,在最后一個長任務(wù)(Long Task)完成的時間,并且在隨后的 5 秒內(nèi)網(wǎng)絡(luò)和主線程是空閑的,如下圖:

          Google 提出了一個 RAIL 模型:對于用戶交互(比如點擊事件),推薦的響應時間是 100ms 以內(nèi)。那么為了達成這個目標,推薦在空閑時間里執(zhí)行任務(wù)不超過 50ms(W3C 也有這樣的標準規(guī)定),這樣能在用戶無感知的情況下響應用戶的交互,否則就會造成延遲感

          這是一個很重要的用戶體驗指標,代表著頁面何時真正進入可用的狀態(tài)。畢竟光內(nèi)容渲染的快也不夠,還要能迅速響應用戶的交互。想必大家應該體驗過某些網(wǎng)站,雖然內(nèi)容渲染出來了,但是響應交互很卡頓,只能過一會才能流暢交互的情況。

          FCI

          First CPU Idle,頁面首可交互時間

          與 TTI 不同的是:FCI 發(fā)生在用戶可以開始與頁面交互時;TTI 發(fā)生在用戶完全能夠(可持續(xù))與頁面交互時

          FID

          First Input Delay,首次輸入延遲,用于記錄在 FCP 和 TTI 之間用戶首次與頁面交互時響應的延遲

          就是看用戶交互事件觸發(fā)到頁面響應中間耗時多少,如果其中有長任務(wù)發(fā)生的話那么勢必會造成響應時間變長

          FPS

          Frames Per Second,用于表示每秒可以重新繪制的幀數(shù),是衡量應用流暢度的一個非常重要的指標,60fps(每次繪制 16.7ms) 是頁面流暢的目標,否則用戶便會感覺到頁面卡頓

          核心性能指標

          以上我們學習了 13 個性能指標,但最常用、最關(guān)鍵的是以下四個核心指標:

          • 白屏時間:頁面空白時間,F(xiàn)P&FCP
          • 首屏時間:頁面可視區(qū)域內(nèi)容以完全呈現(xiàn)時間,F(xiàn)SP
          • 可交互時間:用戶首次可交互時間,F(xiàn)CI
          • 可持續(xù)交互時間:用戶首次可完全可持續(xù)交互時間,TTI

          總結(jié)與思考

          本文,我們學習了從文檔加載到用戶交互所涉及的性能指標:

          • 文檔加載過程:
            • TTFB:從請求開始到接收第一字節(jié)的時間
            • DCL:空白到出現(xiàn)內(nèi)容所花費的時間
            • L:onLoad 事件觸發(fā)所需時間
          • 渲染呈現(xiàn)過程:
            • FP&FCP:首次繪制(FP,可能是背景色或loading),首次內(nèi)容繪制時間(FCP)
            • FMP:首要內(nèi)容出現(xiàn)在屏幕上的時間
            • LCP:視窗內(nèi)最大的元素繪制的時
            • SI:頁面加載過程中內(nèi)容可視化顯示的速度
            • FSP:從開始加載到首屏內(nèi)容全部繪制完成的時間
          • 交互過程:
            • TTI:網(wǎng)頁首次完全達到可交互狀態(tài)的時間點
            • FCI:頁面首可交互時間
            • FID:首次輸入延遲
            • FPS:每秒可以重新繪制的幀數(shù),用于衡量應用流暢度

          其中最重要的是白屏時間(FP&FCP)、首屏時間(FSP)、可交互時間(FCI)、可持續(xù)交互時間(TTI),下一章,我們將走進新一代性能指標 Web Vitals

          參考鏈接

          • MDN
          • Web 性能指標:https://juejin.cn/post/6844904153869713416

          最后

          歡迎關(guān)注「三分鐘學前端」,回復「交流」自動加入前端三分鐘進階群,每日一道編程算法面試題(含解答),助力你成為更優(yōu)秀的前端開發(fā)!

          號內(nèi)回復:

          網(wǎng)絡(luò)」,自動獲取三分鐘學前端網(wǎng)絡(luò)篇小書(90+頁)
          JS」,自動獲取三分鐘學前端 JS 篇小書(120+頁)
          算法」,自動獲取 github 2.9k+ 的前端算法小書
          面試」,自動獲取 github 23.2k+ 的前端面試小書
          簡歷」,自動獲取程序員系列的 120 套模版
          》》面試官也在看的前端面試資料《《
          “在看和轉(zhuǎn)發(fā)”就是最大的支持
          瀏覽 78
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  成 年 人 黄 色 视频 网站 久久久 | 三级片日韩在线观看 | 五月亭亭六月丁香 | 台湾综合在线观看 | 2024日韩无码 |