備註:Interface表示人機交互界面。javascript
重點理解:Rendering engine(渲染引擎)、NetWorking(網絡)、JavaScript Interpreter(JS引擎)、Data Persistence(數據存儲)html
第二步:將解析成的DOM樹和CSS規則進行關聯生成渲染樹(Render Tree)。html5
第三步:進入佈局階段,爲DOM樹的每一個節點分配在屏幕上出現的確切座標(這一階段仍是渲染樹)java
第四步:進入繪製階段,在這裏渲染引擎的工做就結束了,接下來就給用戶界面後端(UI Backend)對渲染樹的每一個節點進行繪製,呈現出頁面效果。chrome
說明:爲了提升頁面呈現速度,渲染引擎採用的是漸進式渲染,也就是在邊解析、邊渲染的模式下進行工做的,它沒必要等着整個HTML解析完成再渲染。後端
疑問總結?
問: 爲何有些網頁打開時過了幾秒纔有樣式出現?
答:這個問題跟渲染引擎無關,主要因爲請求CSS樣式文件時網絡延時形成。
複製代碼
- Webkit內核的瀏覽器:chrome、Safari
- Gecko內核的瀏覽器:Firefox
從上圖可知,Webkit和Gecko內核的渲染流程和機制總體上是一致的,它們的差別性總結:瀏覽器
衆所周知,直接用JS操做DOM是很浪費性能的。由於每次經過JS操做(訪問/新增/刪除/更新)DOM都會致使DOM Tree(DOM樹)從新佈局/迴流、繪製(簡稱重排、重繪過程)。緩存
重排: 當DOM節點信息發生變化,例如位置改變,DOM節點大小改變,都會對該DOM從新計算,並進行佈局/迴流操做(不一樣瀏覽器術語不同);性能優化
****怎樣會致使重排?****
1. 縮放瀏覽器窗口;
2. 改變頁面中DOM節點大小或位置;
3. 經過innerHTML/innerText修改DOM節點上的字體信息。注意:文本也屬於DOM節點之一(文本節點);
4. 經過JS的dom中style屬性來改變DOM節點的樣式;
5. 經過JS對DOM節點進行操做(訪問/新增/刪除/更新);
6. HTML頁面首次呈現;
複製代碼
重繪: 當DOM節點信息不發生變化時,只改變了DOM節點的外貌樣式時(不改變DOM節點的位置和大小,只改變字體顏色或背景色等)。會對該DOM進行從新繪製。注意有重排一定會有重繪,有重繪不必定有重排;bash
//基本方式
for(var i=0;i<100;i++){
var dom=document.getElementById("xxx");
dom.innerHTML=dom.innerHTML+i;
}
//變量緩存DOM引用
var dom=document.getElementById("xxx");
for(var i=0;i<100;i++){
dom.innerHTML=dom.innerHTML+i;
}
複製代碼
//基本方式
var dom=document.getElementById("xxx");
for(var i=0;i<100;i++){
var cre_dom=document.createElement("xxx");
dom.appendChild(cre_dom);
}
//使用createDocumentFragment
var dom=document.getElementById("xxx");
var cre_frag=document.createDocumentFragment();
for(var i=0;i<100;i++){
var cre_dom=document.createElement("xxx");
cre_frag.appendChild(cre_dom);
}
dom.appendChild(cre_frag);
複製代碼