SlideShare uma empresa Scribd logo
1 de 39
Baixar para ler offline
SHOW ME THE PAGE
介紹 Critical Rendering Path
By Yvonne Yu
⾃自我介紹暨⼯工商服務
www.ssaab
圖⽚片來源:http://blog.xuite.net/tj41920/tj419201/318188942
?
?
究竟瀏覽器怎麼
呈現網站的呢?
HTML
CSS
JavaScript
Critical Rendering Path
關鍵 渲染 路徑
從瀏覽器收到資料後到初始化
網站畫⾯面中間所經歷 渲染 網⾴頁
畫⾯面的過程
會影響到從無到渲染畫⾯面前的事情
為什麼要認識 

Critical Rendering Path?
效能很重要!

空⽩白畫⾯面讓⼈人抓狂!
等了快10秒了...
圖⽚片來源:Google Developers - Critical Rendering Path
效能好
效能不好
Critical Rendering Path
Critical Rendering Path
究竟,Critical Rendering
Path 中間發⽣生什麼事情呢?
GET

HTML
Network
CSS CSSOM
HTML DOM
圖⽚片參考:https://www.igvita.com/slides/2013/fluent-perfcou
JavaScript
Render
Tree
Layout Paint
Critical Rendering Path
從簡單的範例開始吧~
Network - 跟 server 要求資源
★ DNS Lookup - 依照 domain name 找尋 server 真正的 IP 位址
★ New TCP Connection - handshake roundtrip to the server
★ Http Request - 對 server 最少會有⼀一次 roundtrip

(包含 server 處理 request 的時間)
圖⽚片來源:google - Delivering the go
注意!只要跟 server 要求的資料,都會經過以上步驟!!
開始解析 HTML
HTML
Document Object Model
⽂文件物件模型
『⼀一種語⾔言介⾯面提供了⼀一個⽂文件(樹)的結構化
表⽰示法,並定義讓程式可以存取並改變⽂文件架
構、⾵風格和內容的⽅方法。DOM 提供了⽂文件以擁
有屬性與函式的節點與物件組成的結構化表
⽰示。』- from mozilla developer network
DOM
怎麼從 HTML 解析成 DOM︖?
圖⽚片來源:Google developers - constructing the obj
開始解析 HTML DOM
GET

HTML
HTML DOM
HTML
head
meta
title
linklink!?
title
HTML
CSS is Critical(關鍵的)!
GET

HTML
Network
CSS CSSOM
DOMHT DO
CS CSS
HTML
head
meta
body
plink
開始下載並取得 CSS ,且
解析建⽴立 CSSOM
CSSOM (CSS Object Model)
CSS
body
p a
acolor: #f00;
font-size: 16px;
text-decoration:
none;
font-size:
16px;
color: #f00;
font-size: 16px;
color: #f00;
font-size: 16px;
CSS 物件模型
title
Image is NOT Critical
開始下載圖⽚片,建⽴立 Img DOM Node,

然後持續解析 DOM…
HTML
head
body
p
meta link
img
圖⽚片不會讓 DOM 停⽌止解析,
並不在 Critical Rendering Path 流程中
JavaScript is Critical !
HTML
GET

HTML
Network CSS CSSOM
DOM
JavaScript
title
HTML
head
body
p
meta link
imgscript
HTM DO
CSSOCSS
JavaScript 可動態改變
DOM 跟 CSSOM
JavaScript
JavaScript is Critical !
假如⺫⽬目前有 CSSOM 正在解析中的話,瀏覽器會先確定 Critical
CSS 有載⼊入且解析完成後,才會執⾏行載⼊入完畢的 JavaScript
HTML
GET

HTML
Network CSS CSSOM
DOM
JavaScript
HTM DO
JavaScript
2. CSSOM 會全部解析完畢
3. 才會開始執⾏行 JavaScript
1. 解析 DOM 是暫停的!
DOM 全部解析完畢
HTML
GET

HTML
Network CSS CSSOM
DOM
JavaScript
title
HTML
head
body
p
meta link
imgscript
DOMContentLoaded event
jQuery(document).ready
等等!這時候畫⾯面還沒有出現喔!
GET

HTML
Network
CSS CSSOM
HTML DOM
JavaScript
Render
Tree
Layout Paint
Critical Rendering Path
建⽴立 Render Tree
描述內容 描述樣式
圖⽚片來源:render tree construction
Render Tree 只會含有『可⾒見的』Node,被 CSS 隱藏的
display:none 或是無法被察覺的 Node ( scripts, meta) 皆會
被省略在 Render Tree 中
Layout & Paint
Layout (reflow) - 依照 Render Tree 內容計算在螢幕上視埠 (viewpoint)
確切的 pixel size 跟 位置(幾何資訊)。
painting (rasterizing) - 把在 Layout 計算完成的 Node 資訊,繪製在瀏覽
器上
Render
Tree
Layout Paint
圖⽚片來源:render tree construction
Critical Rendering Path 總結
GET

HTML
Network
CSS CSSOM
HTML DOM
JavaScript
Render
Tree
Layout Paint
取得
HTML
解析DOM
GET CSS CSSOM
GET JS 跑 JS
停⽌止解析等
JS 跑完
等 CSSOM
完成
Render
Page
計算 Critical Rendering Path 時間
取得HTML 解析DOM
GET CSS CSSOM
GET JS 跑 JS
停⽌止解析等
JS 跑完
等 CSSOM
完成
Render
Page10kb, 0.5s
35kb, 0.4s
38kb, 0.4s
0.05s
解析中 0.1s
Critical Rendering Path 的時間:

0.5 + 0.1 + 0.4 (平⾏行下載) + 0.07 約= 1.0 s
0.01s
0.01s
1.0 秒
網站需載⼊入過⼤大外部
Critical 檔案
圖⽚片來源
網站需載⼊入過多外部 Critical 檔案,

造成Critical Rendering Path 太久,

使⽤用者很晚看到 first paint
圖⽚片來源
Critical Rendering Path
關鍵 渲染 路徑
網站上裡關鍵、重要的!
什麼是 Critical CSS !?
圖⽚片來源:CSS and the critical path
名詞介紹
‣ 關鍵資源 - 可能禁⽌止網⾴頁初次轉譯的資源。
‣ 關鍵位元組 - 實現網⾴頁初次轉譯所需的總位元組數,這是所有關鍵資源
的傳輸檔案⼤大⼩小總和。
取得HTML 解析DOM
GET CSS CSSOM
GET JS 跑 JS
停⽌止解析等
JS 跑完
等 CSSOM
完成
Render
Page10kb, 0.5s
35kb, 0.4s
38kb, 0.4s
0.05s
解析 0.1s
0.01s
0.01s 資料來源
3 種 關鍵資源(HTML, CSS, JS)
83 kb 關鍵位元組 (HTML + CSS + JS)
取得HTML 解析DOM
GET CSS CSSOM
GET JS 跑 JS
停⽌止解析等
JS 跑完
等 CSSOM
完成
Render
Page10kb, 0.5s
35kb, 0.4s
38kb, 0.4s
0.05s
解析 0.1s
優化 Critical Rendering Path 重點就是讓
關鍵資源越少越⼩小越快下載完畢越好!!
0.01s
0.01s
優化 Critical Rendering Path 效能
✓ 區分 critical CSS 跟 non-critical CSS,並使⽤用 Inline
CSS <style> 載⼊入 critical CSS。

- 減少 ⼀一次 Request 的時間!

- 假如 CSS 檔案不⼤大,不需硬拆成多份檔案。
✓ 把 CSS 放在 head 標籤裡,樣式越快先處理越好。因為
需要等 CSSOM 完成才會開始 render page
優化 Critical Rendering Path 效能
✓JavaScript 改成⾮非同步載⼊入 (async),讓 JavaScript 準
備好之前不會禁⽌止 DOM 建構作業

- 改成 async 無法確保 JavaScript 執⾏行順序

- 在畫⾯面顯⽰示時,假如 JavaScript 沒有準備執⾏行,畫⾯面要
確保不會有問題
CanIUse.com
更多優化效能關鍵字
Pixel Pipeline 

因 JavaScript 可修改 DOM 跟 CSSOM,修改後可能會重新計算
DOM 的 style, layout 等資訊。暸解後對動畫跟使⽤用者體驗加分
(Udacity 線上教學網址)
HTTP/2 傳輸協定
(Google Dev Summit - HTTP2 101 教學)
經過 16 年,HTTP/2 終於在 2015 年正式發佈。改進了很多現在
依然普遍的 HTTP 1.1 限制(另如,Header 壓縮等)
References
• Google developers - Critical Rendering Path
• Building Faster Website by Ilya Grigorik
• Delivering the goods by Paul Irish
• CSS and the Critical Path by Patrick Hamann
• Critical Rendering Path by Patrick Sexton
• Understanding the critical rendering path, rendering pages in
1 second by Luis Vieira
Q&A

Mais conteúdo relacionado

Mais procurados

Angular.js & ASP.NET in Study4
Angular.js & ASP.NET in Study4Angular.js & ASP.NET in Study4
Angular.js & ASP.NET in Study4Kyle Shen
 
Qq.com前端架构实践与思考
Qq.com前端架构实践与思考Qq.com前端架构实践与思考
Qq.com前端架构实践与思考greengnn
 
Angular 2 Taiwan 小聚 Forms 介紹
Angular 2 Taiwan 小聚 Forms 介紹Angular 2 Taiwan 小聚 Forms 介紹
Angular 2 Taiwan 小聚 Forms 介紹Jeff Wu
 
AngularJS training in Luster
AngularJS training in LusterAngularJS training in Luster
AngularJS training in LusterJason Chung
 
Mobile Web Game 開發心得分享
Mobile Web Game 開發心得分享Mobile Web Game 開發心得分享
Mobile Web Game 開發心得分享世欽 陳
 
Practice: Refactor with Tests
Practice: Refactor with TestsPractice: Refactor with Tests
Practice: Refactor with TestsManic Chuang
 
Blazor 與 Radzen 同行
Blazor 與 Radzen 同行Blazor 與 Radzen 同行
Blazor 與 Radzen 同行Jimmy Ho
 
SITCON 2016 ─ Modern Front-End Workflow with Webpack
SITCON 2016 ─ Modern Front-End Workflow with WebpackSITCON 2016 ─ Modern Front-End Workflow with Webpack
SITCON 2016 ─ Modern Front-End Workflow with Webpack昱安 周
 
凡客移动应用之Android + HTML5技术运用 | 凡客 汪健飞 徐金山
凡客移动应用之Android + HTML5技术运用 | 凡客 汪健飞 徐金山凡客移动应用之Android + HTML5技术运用 | 凡客 汪健飞 徐金山
凡客移动应用之Android + HTML5技术运用 | 凡客 汪健飞 徐金山imShining @DevCamp
 
Angular 2 表單的處理與驗證
Angular 2 表單的處理與驗證Angular 2 表單的處理與驗證
Angular 2 表單的處理與驗證Jeff Wu
 
React js入門教學
React js入門教學React js入門教學
React js入門教學TaiShunHuang
 
快快樂樂學會 Angular 2 網站開發框架 (Modern Web 2016)
快快樂樂學會 Angular 2 網站開發框架 (Modern Web 2016)快快樂樂學會 Angular 2 網站開發框架 (Modern Web 2016)
快快樂樂學會 Angular 2 網站開發框架 (Modern Web 2016)Will Huang
 

Mais procurados (13)

Angular.js & ASP.NET in Study4
Angular.js & ASP.NET in Study4Angular.js & ASP.NET in Study4
Angular.js & ASP.NET in Study4
 
Qq.com前端架构实践与思考
Qq.com前端架构实践与思考Qq.com前端架构实践与思考
Qq.com前端架构实践与思考
 
Angular 2 Taiwan 小聚 Forms 介紹
Angular 2 Taiwan 小聚 Forms 介紹Angular 2 Taiwan 小聚 Forms 介紹
Angular 2 Taiwan 小聚 Forms 介紹
 
AngularJS training in Luster
AngularJS training in LusterAngularJS training in Luster
AngularJS training in Luster
 
Mobile Web Game 開發心得分享
Mobile Web Game 開發心得分享Mobile Web Game 開發心得分享
Mobile Web Game 開發心得分享
 
Practice: Refactor with Tests
Practice: Refactor with TestsPractice: Refactor with Tests
Practice: Refactor with Tests
 
Blazor 與 Radzen 同行
Blazor 與 Radzen 同行Blazor 與 Radzen 同行
Blazor 與 Radzen 同行
 
SITCON 2016 ─ Modern Front-End Workflow with Webpack
SITCON 2016 ─ Modern Front-End Workflow with WebpackSITCON 2016 ─ Modern Front-End Workflow with Webpack
SITCON 2016 ─ Modern Front-End Workflow with Webpack
 
凡客移动应用之Android + HTML5技术运用 | 凡客 汪健飞 徐金山
凡客移动应用之Android + HTML5技术运用 | 凡客 汪健飞 徐金山凡客移动应用之Android + HTML5技术运用 | 凡客 汪健飞 徐金山
凡客移动应用之Android + HTML5技术运用 | 凡客 汪健飞 徐金山
 
Angular 2 表單的處理與驗證
Angular 2 表單的處理與驗證Angular 2 表單的處理與驗證
Angular 2 表單的處理與驗證
 
React js入門教學
React js入門教學React js入門教學
React js入門教學
 
性能问题的快速定位
性能问题的快速定位性能问题的快速定位
性能问题的快速定位
 
快快樂樂學會 Angular 2 網站開發框架 (Modern Web 2016)
快快樂樂學會 Angular 2 網站開發框架 (Modern Web 2016)快快樂樂學會 Angular 2 網站開發框架 (Modern Web 2016)
快快樂樂學會 Angular 2 網站開發框架 (Modern Web 2016)
 

Destaque

CP 值很高的 Gulp
CP 值很高的 GulpCP 值很高的 Gulp
CP 值很高的 GulpYvonne Yu
 
我與編輯器
我與編輯器我與編輯器
我與編輯器Yvonne Yu
 
Working with Grids - Evaluating Bootstrap's grid system
Working with Grids - Evaluating Bootstrap's grid systemWorking with Grids - Evaluating Bootstrap's grid system
Working with Grids - Evaluating Bootstrap's grid systemAlbino Tonnina
 
Web Performance Optimization @Develer
Web Performance Optimization @DevelerWeb Performance Optimization @Develer
Web Performance Optimization @DevelerMassimo Iacolare
 
Html css workshop, lesson 0, how browsers work
Html css workshop, lesson 0, how browsers workHtml css workshop, lesson 0, how browsers work
Html css workshop, lesson 0, how browsers workAlbino Tonnina
 
現代化網頁基礎排版技術
現代化網頁基礎排版技術現代化網頁基礎排版技術
現代化網頁基礎排版技術洧杰 廖
 
那些年,我們曾經做過的wireframe、mockup、prototype
那些年,我們曾經做過的wireframe、mockup、prototype那些年,我們曾經做過的wireframe、mockup、prototype
那些年,我們曾經做過的wireframe、mockup、prototype洧杰 廖
 
前端開發流程分享
前端開發流程分享前端開發流程分享
前端開發流程分享洧杰 廖
 
打造網站親和力
打造網站親和力打造網站親和力
打造網站親和力Yvonne Yu
 
一拳前端考題
一拳前端考題一拳前端考題
一拳前端考題洧杰 廖
 
如何逐步提升CSS的可利用性、模組化
如何逐步提升CSS的可利用性、模組化如何逐步提升CSS的可利用性、模組化
如何逐步提升CSS的可利用性、模組化洧杰 廖
 
Angularjs in mobile app
Angularjs in mobile appAngularjs in mobile app
Angularjs in mobile appYvonne Yu
 
測試是什麼
測試是什麼測試是什麼
測試是什麼Yvonne Yu
 

Destaque (13)

CP 值很高的 Gulp
CP 值很高的 GulpCP 值很高的 Gulp
CP 值很高的 Gulp
 
我與編輯器
我與編輯器我與編輯器
我與編輯器
 
Working with Grids - Evaluating Bootstrap's grid system
Working with Grids - Evaluating Bootstrap's grid systemWorking with Grids - Evaluating Bootstrap's grid system
Working with Grids - Evaluating Bootstrap's grid system
 
Web Performance Optimization @Develer
Web Performance Optimization @DevelerWeb Performance Optimization @Develer
Web Performance Optimization @Develer
 
Html css workshop, lesson 0, how browsers work
Html css workshop, lesson 0, how browsers workHtml css workshop, lesson 0, how browsers work
Html css workshop, lesson 0, how browsers work
 
現代化網頁基礎排版技術
現代化網頁基礎排版技術現代化網頁基礎排版技術
現代化網頁基礎排版技術
 
那些年,我們曾經做過的wireframe、mockup、prototype
那些年,我們曾經做過的wireframe、mockup、prototype那些年,我們曾經做過的wireframe、mockup、prototype
那些年,我們曾經做過的wireframe、mockup、prototype
 
前端開發流程分享
前端開發流程分享前端開發流程分享
前端開發流程分享
 
打造網站親和力
打造網站親和力打造網站親和力
打造網站親和力
 
一拳前端考題
一拳前端考題一拳前端考題
一拳前端考題
 
如何逐步提升CSS的可利用性、模組化
如何逐步提升CSS的可利用性、模組化如何逐步提升CSS的可利用性、模組化
如何逐步提升CSS的可利用性、模組化
 
Angularjs in mobile app
Angularjs in mobile appAngularjs in mobile app
Angularjs in mobile app
 
測試是什麼
測試是什麼測試是什麼
測試是什麼
 

Semelhante a Show Me The Page - 介紹 Critical rendering path

建立前端开发团队 (Front-end Development Environment)
建立前端开发团队 (Front-end Development Environment)建立前端开发团队 (Front-end Development Environment)
建立前端开发团队 (Front-end Development Environment)Joseph Chiang
 
前端性能测试
前端性能测试前端性能测试
前端性能测试tbmallf2e
 
前端性能优化和自动化
前端性能优化和自动化前端性能优化和自动化
前端性能优化和自动化kaven yan
 
July.2011.w3ctech
July.2011.w3ctechJuly.2011.w3ctech
July.2011.w3ctechKai Cui
 
淘宝网前端应用与发展
淘宝网前端应用与发展淘宝网前端应用与发展
淘宝网前端应用与发展taobao.com
 
浅析浏览器解析和渲染
浅析浏览器解析和渲染浅析浏览器解析和渲染
浅析浏览器解析和渲染Ailsa126
 
Inside the-browser
Inside the-browserInside the-browser
Inside the-browserjy03845581
 
Inside the-browser
Inside the-browserInside the-browser
Inside the-browserjy03845581
 
模糊也是一種美 - 從 BlurHash 探討前後端上傳圖片架構
模糊也是一種美 - 從 BlurHash 探討前後端上傳圖片架構模糊也是一種美 - 從 BlurHash 探討前後端上傳圖片架構
模糊也是一種美 - 從 BlurHash 探討前後端上傳圖片架構Mu Chun Wang
 
Modern Web with CSS and CSS Grid (image with links inside)
Modern Web with CSS and CSS Grid (image with links inside)Modern Web with CSS and CSS Grid (image with links inside)
Modern Web with CSS and CSS Grid (image with links inside)百範 陳
 
GDSC FCU 第1堂 前端新手村 - HTML, CSS, JavaScript介紹
GDSC FCU 第1堂 前端新手村 - HTML, CSS, JavaScript介紹GDSC FCU 第1堂 前端新手村 - HTML, CSS, JavaScript介紹
GDSC FCU 第1堂 前端新手村 - HTML, CSS, JavaScript介紹FCUGDSC
 
程序组介绍Ver2.0
程序组介绍Ver2.0程序组介绍Ver2.0
程序组介绍Ver2.0vtmers2012
 
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型从无阻塞并行脚本加载(Lab.js)到浏览器消息模型
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型裕波 周
 
模块加载策略 - 2012 SDCC, 北京
模块加载策略 - 2012 SDCC, 北京模块加载策略 - 2012 SDCC, 北京
模块加载策略 - 2012 SDCC, 北京Joseph Chiang
 
Beyond rails server
Beyond rails serverBeyond rails server
Beyond rails serverMichael Chen
 
赵泽欣 - 淘宝网前端应用与发展
赵泽欣 - 淘宝网前端应用与发展赵泽欣 - 淘宝网前端应用与发展
赵泽欣 - 淘宝网前端应用与发展d0nn9n
 
前端性能优化&测试
前端性能优化&测试前端性能优化&测试
前端性能优化&测试tbmallf2e
 
网站性能优化(周桂华)
网站性能优化(周桂华)网站性能优化(周桂华)
网站性能优化(周桂华)txppt
 
使用Big pipe提升浏览速度 wk_velocity
使用Big pipe提升浏览速度 wk_velocity使用Big pipe提升浏览速度 wk_velocity
使用Big pipe提升浏览速度 wk_velocitykumawu
 
Non-MVC Web Framework
Non-MVC Web FrameworkNon-MVC Web Framework
Non-MVC Web FrameworkFred Chien
 

Semelhante a Show Me The Page - 介紹 Critical rendering path (20)

建立前端开发团队 (Front-end Development Environment)
建立前端开发团队 (Front-end Development Environment)建立前端开发团队 (Front-end Development Environment)
建立前端开发团队 (Front-end Development Environment)
 
前端性能测试
前端性能测试前端性能测试
前端性能测试
 
前端性能优化和自动化
前端性能优化和自动化前端性能优化和自动化
前端性能优化和自动化
 
July.2011.w3ctech
July.2011.w3ctechJuly.2011.w3ctech
July.2011.w3ctech
 
淘宝网前端应用与发展
淘宝网前端应用与发展淘宝网前端应用与发展
淘宝网前端应用与发展
 
浅析浏览器解析和渲染
浅析浏览器解析和渲染浅析浏览器解析和渲染
浅析浏览器解析和渲染
 
Inside the-browser
Inside the-browserInside the-browser
Inside the-browser
 
Inside the-browser
Inside the-browserInside the-browser
Inside the-browser
 
模糊也是一種美 - 從 BlurHash 探討前後端上傳圖片架構
模糊也是一種美 - 從 BlurHash 探討前後端上傳圖片架構模糊也是一種美 - 從 BlurHash 探討前後端上傳圖片架構
模糊也是一種美 - 從 BlurHash 探討前後端上傳圖片架構
 
Modern Web with CSS and CSS Grid (image with links inside)
Modern Web with CSS and CSS Grid (image with links inside)Modern Web with CSS and CSS Grid (image with links inside)
Modern Web with CSS and CSS Grid (image with links inside)
 
GDSC FCU 第1堂 前端新手村 - HTML, CSS, JavaScript介紹
GDSC FCU 第1堂 前端新手村 - HTML, CSS, JavaScript介紹GDSC FCU 第1堂 前端新手村 - HTML, CSS, JavaScript介紹
GDSC FCU 第1堂 前端新手村 - HTML, CSS, JavaScript介紹
 
程序组介绍Ver2.0
程序组介绍Ver2.0程序组介绍Ver2.0
程序组介绍Ver2.0
 
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型从无阻塞并行脚本加载(Lab.js)到浏览器消息模型
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型
 
模块加载策略 - 2012 SDCC, 北京
模块加载策略 - 2012 SDCC, 北京模块加载策略 - 2012 SDCC, 北京
模块加载策略 - 2012 SDCC, 北京
 
Beyond rails server
Beyond rails serverBeyond rails server
Beyond rails server
 
赵泽欣 - 淘宝网前端应用与发展
赵泽欣 - 淘宝网前端应用与发展赵泽欣 - 淘宝网前端应用与发展
赵泽欣 - 淘宝网前端应用与发展
 
前端性能优化&测试
前端性能优化&测试前端性能优化&测试
前端性能优化&测试
 
网站性能优化(周桂华)
网站性能优化(周桂华)网站性能优化(周桂华)
网站性能优化(周桂华)
 
使用Big pipe提升浏览速度 wk_velocity
使用Big pipe提升浏览速度 wk_velocity使用Big pipe提升浏览速度 wk_velocity
使用Big pipe提升浏览速度 wk_velocity
 
Non-MVC Web Framework
Non-MVC Web FrameworkNon-MVC Web Framework
Non-MVC Web Framework
 

Show Me The Page - 介紹 Critical rendering path