iT邦幫忙

DAY 21
1

30 天學會 Web 前端效能優化系列 第 21

[30 天學會 Web 前端效能優化] 21. 什麼是 Critical rendering path ?

  • 分享至 

  • xImage
  •  

從第一篇講到現在,相信各位對於瀏覽器的運作有更深的認識了吧?前面之所以講這麼多瀏覽器的運作原理,就是在為了這一篇文章鋪路。

什麼是 Critical rendering path ? 簡單定義如下:在使用者可以看到網站呈現結果之前,瀏覽器所需經過之所有與 Rendering 至關重要的過程,便稱作所謂的 Critical rendering path。

知道定義之後,再讓我們認識幾個名詞以方便溝通:

  1. Critical Resource: 所有會 block 頁面初次 rendering 的 resource 。
  2. Critical Path Length: roundtrips 的次數或是 fetch 總體 critical resources 所需的時間。
  3. Critical Bytes: 與初次 rendering 相關之所有 critical resources 的檔案大小之總和。

我們再以前篇文章的 HTML Document 為例,不過增加了一張圖片:

  <link href="layout.css" rel="stylesheet" type="text/css" />
  <script src="scripta.js" />
  <script src="scriptb.js" />


  <p>Hello this is a test page.</p>
  <img src="test.jpg" />

假設:

  1. HTML 檔案大小 10kb
  2. layout.css 檔案大小 4kb
  3. scripta.js 檔案大小 5kb
  4. scriptb.js 檔案大小 10kb
  5. test.jpg 檔案大小 50kb

那麼請問哪些為 Critical Resource 呢? 另外假設往返 server 的時間為 200ms ,而 Server 回覆 HTML Document 所需的時間為 150ms ,回覆其他檔案皆為 15ms,Critical Path Length(亦即抓取所有 Critical Resource 所需花費的時間)為何?而 Critical Bytes 大小又是多少呢?

解答:

  1. Critical Resource: 分別為 HTML、layout.css、scripta.js 以及 scriptb.js 。test.jpg 不會影響到初次 rendering,因此並非 Critical Resource 。
  2. Critical Path Length : HTML Parser 讀到 scripta.js 那一段之後整體 DOM 的建構就停頓了,但因為有 Pre-loader 的協助,瀏覽器會平行下載 layout.css 、 scripta.js 、 scriptb.js 這三個檔案,只要花費 10ms + 200ms 就可以把三個檔案都抓下來,再加上抓 HTML Document 的時間(150ms + 200ms),總體時間為 560ms。
  3. Critical Bytes :這部分不說大家應該都會吧? 10kb + 4kb + 5kb + 10kb = 29kb。

為什麼我們要談到 Critical rendering path 呢?因為它是效能優化的核心概念,所有效能優化 Tips 基本上都是以此概念為核心發展出來的。我們調校效能時,最主要就是關注於降低 Critical Path Length 以及減少 Critical Bytes 這兩個部分。


上一篇
[30 天學會 Web 前端效能優化] 20. 瀏覽器 Pre-loader 的功用
下一篇
[30 天學會 Web 前端效能優化] 22. 透過專案複習前面的知識1 - doc.write 的可怕
系列文
30 天學會 Web 前端效能優化30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
0
ztan6661
iT邦新手 5 級 ‧ 2015-02-04 16:36:31

回覆其他檔案皆為 15ms,Critical Path Length(亦即抓取所有 Critical Resource 所需花費的時間)為何?而 Critical Bytes 大小又是多少呢?
解答:

  1. Critical Resource: 分別為 HTML、layout.css、scripta.js 以及 scriptb.js 。test.jpg 不會影響到初次 rendering,因此並非 Critical Resource 。
  2. Critical Path Length : HTML Parser 讀到 scripta.js 那一段之後整體 DOM 的建構就停頓了,但因為有 Pre-loader 的協助,瀏覽器會平行下載 layout.css 、 scripta.js 、 scriptb.js 這三個檔案,只要花費 10ms + 200ms 就可以把三個檔案都抓下來

====================================
以上這一段應該是15ms + 200 ms吧, 板主你前頭寫一個檔案需15ms呀, 對嗎?

0
ztan6661
iT邦新手 5 級 ‧ 2015-02-04 16:36:33

回覆其他檔案皆為 15ms,Critical Path Length(亦即抓取所有 Critical Resource 所需花費的時間)為何?而 Critical Bytes 大小又是多少呢?
解答:

  1. Critical Resource: 分別為 HTML、layout.css、scripta.js 以及 scriptb.js 。test.jpg 不會影響到初次 rendering,因此並非 Critical Resource 。
  2. Critical Path Length : HTML Parser 讀到 scripta.js 那一段之後整體 DOM 的建構就停頓了,但因為有 Pre-loader 的協助,瀏覽器會平行下載 layout.css 、 scripta.js 、 scriptb.js 這三個檔案,只要花費 10ms + 200ms 就可以把三個檔案都抓下來

====================================
以上這一段應該是15ms + 200 ms吧, 板主你前頭寫一個檔案需15ms呀, 對嗎?

0
ztan6661
iT邦新手 5 級 ‧ 2015-02-04 16:36:33

回覆其他檔案皆為 15ms,Critical Path Length(亦即抓取所有 Critical Resource 所需花費的時間)為何?而 Critical Bytes 大小又是多少呢?
解答:

  1. Critical Resource: 分別為 HTML、layout.css、scripta.js 以及 scriptb.js 。test.jpg 不會影響到初次 rendering,因此並非 Critical Resource 。
  2. Critical Path Length : HTML Parser 讀到 scripta.js 那一段之後整體 DOM 的建構就停頓了,但因為有 Pre-loader 的協助,瀏覽器會平行下載 layout.css 、 scripta.js 、 scriptb.js 這三個檔案,只要花費 10ms + 200ms 就可以把三個檔案都抓下來

====================================
以上這一段應該是15ms + 200 ms吧, 板主你前頭寫一個檔案需15ms呀, 對嗎?

0
ztan6661
iT邦新手 5 級 ‧ 2015-02-04 16:36:34

回覆其他檔案皆為 15ms,Critical Path Length(亦即抓取所有 Critical Resource 所需花費的時間)為何?而 Critical Bytes 大小又是多少呢?
解答:

  1. Critical Resource: 分別為 HTML、layout.css、scripta.js 以及 scriptb.js 。test.jpg 不會影響到初次 rendering,因此並非 Critical Resource 。
  2. Critical Path Length : HTML Parser 讀到 scripta.js 那一段之後整體 DOM 的建構就停頓了,但因為有 Pre-loader 的協助,瀏覽器會平行下載 layout.css 、 scripta.js 、 scriptb.js 這三個檔案,只要花費 10ms + 200ms 就可以把三個檔案都抓下來

====================================
以上這一段應該是15ms + 200 ms吧, 板主你前頭寫一個檔案需15ms呀, 對嗎?

0
ztan6661
iT邦新手 5 級 ‧ 2015-02-04 16:36:34

回覆其他檔案皆為 15ms,Critical Path Length(亦即抓取所有 Critical Resource 所需花費的時間)為何?而 Critical Bytes 大小又是多少呢?
解答:

  1. Critical Resource: 分別為 HTML、layout.css、scripta.js 以及 scriptb.js 。test.jpg 不會影響到初次 rendering,因此並非 Critical Resource 。
  2. Critical Path Length : HTML Parser 讀到 scripta.js 那一段之後整體 DOM 的建構就停頓了,但因為有 Pre-loader 的協助,瀏覽器會平行下載 layout.css 、 scripta.js 、 scriptb.js 這三個檔案,只要花費 10ms + 200ms 就可以把三個檔案都抓下來

====================================
以上這一段應該是15ms + 200 ms吧, 板主你前頭寫一個檔案需15ms呀, 對嗎?

0
ztan6661
iT邦新手 5 級 ‧ 2015-02-04 16:36:34

回覆其他檔案皆為 15ms,Critical Path Length(亦即抓取所有 Critical Resource 所需花費的時間)為何?而 Critical Bytes 大小又是多少呢?
解答:

  1. Critical Resource: 分別為 HTML、layout.css、scripta.js 以及 scriptb.js 。test.jpg 不會影響到初次 rendering,因此並非 Critical Resource 。
  2. Critical Path Length : HTML Parser 讀到 scripta.js 那一段之後整體 DOM 的建構就停頓了,但因為有 Pre-loader 的協助,瀏覽器會平行下載 layout.css 、 scripta.js 、 scriptb.js 這三個檔案,只要花費 10ms + 200ms 就可以把三個檔案都抓下來

====================================
以上這一段應該是15ms + 200 ms吧, 板主你前頭寫一個檔案需15ms呀, 對嗎?

0
ztan6661
iT邦新手 5 級 ‧ 2015-02-04 16:36:34

回覆其他檔案皆為 15ms,Critical Path Length(亦即抓取所有 Critical Resource 所需花費的時間)為何?而 Critical Bytes 大小又是多少呢?
解答:

  1. Critical Resource: 分別為 HTML、layout.css、scripta.js 以及 scriptb.js 。test.jpg 不會影響到初次 rendering,因此並非 Critical Resource 。
  2. Critical Path Length : HTML Parser 讀到 scripta.js 那一段之後整體 DOM 的建構就停頓了,但因為有 Pre-loader 的協助,瀏覽器會平行下載 layout.css 、 scripta.js 、 scriptb.js 這三個檔案,只要花費 10ms + 200ms 就可以把三個檔案都抓下來

====================================
以上這一段應該是15ms + 200 ms吧, 板主你前頭寫一個檔案需15ms呀, 對嗎?

0
ztan6661
iT邦新手 5 級 ‧ 2015-02-04 16:36:35

回覆其他檔案皆為 15ms,Critical Path Length(亦即抓取所有 Critical Resource 所需花費的時間)為何?而 Critical Bytes 大小又是多少呢?
解答:

  1. Critical Resource: 分別為 HTML、layout.css、scripta.js 以及 scriptb.js 。test.jpg 不會影響到初次 rendering,因此並非 Critical Resource 。
  2. Critical Path Length : HTML Parser 讀到 scripta.js 那一段之後整體 DOM 的建構就停頓了,但因為有 Pre-loader 的協助,瀏覽器會平行下載 layout.css 、 scripta.js 、 scriptb.js 這三個檔案,只要花費 10ms + 200ms 就可以把三個檔案都抓下來

====================================
以上這一段應該是15ms + 200 ms吧, 板主你前頭寫一個檔案需15ms呀, 對嗎?

0
ztan6661
iT邦新手 5 級 ‧ 2015-02-04 16:36:54

以上這一段應該是15ms + 200 ms吧, 板主你前頭寫一個檔案需15ms呀, 對嗎?

0
ztan6661
iT邦新手 5 級 ‧ 2015-02-04 16:36:55

以上這一段應該是15ms + 200 ms吧, 板主你前頭寫一個檔案需15ms呀, 對嗎?

0
ztan6661
iT邦新手 5 級 ‧ 2015-02-04 16:36:55

以上這一段應該是15ms + 200 ms吧, 板主你前頭寫一個檔案需15ms呀, 對嗎?

0
ztan6661
iT邦新手 5 級 ‧ 2015-02-04 16:36:55

以上這一段應該是15ms + 200 ms吧, 板主你前頭寫一個檔案需15ms呀, 對嗎?

0
ztan6661
iT邦新手 5 級 ‧ 2015-02-04 16:36:56

以上這一段應該是15ms + 200 ms吧, 板主你前頭寫一個檔案需15ms呀, 對嗎?

0
ztan6661
iT邦新手 5 級 ‧ 2015-02-04 16:36:57

以上這一段應該是15ms + 200 ms吧, 板主你前頭寫一個檔案需15ms呀, 對嗎?

我要留言

立即登入留言