1.什么是DOM渲染?
DOM渲染指的是對於瀏覽器中展現給用戶的DOM文檔的生成的過程。
2.DOM渲染的演化過程,大致可以分為可以分為三個階段:
1.解析HTML文件,創建DOM樹
自上而下,遇到任何樣式(link、style)與腳本(script)都會阻塞(外部樣式不阻塞后續外部腳本的加載)。
2.解析CSS
優先級:瀏覽器默認設置<用戶設置<外部樣式<內聯樣式<HTML中的style樣式;
特定級:id數100+類或偽類數10+tag名稱*1
3.將CSS與DOM合並,構建渲染樹(renderingtree)
DOM樹與HTML一一對應,渲染樹會忽略諸如head、display:none的元素
4.布局和繪制,重繪(repaint)和重排(reflow)
reflow(重排):根據 Reader Tree 進行節點信息計算(layout),若渲染樹的一部分更新,且尺寸變化,就會發生重排;
repaint(重繪):根據計算好的信息繪制整個頁面(Painting),部分節點需要更新,但不改變其他集合形狀。如改變某個元素的顏色,就會發生重繪。
5.理論上,每一次的dom更改或者css幾何屬性更改,都會引起一次瀏覽器的重繪/重排過程,而如果是css非幾何屬性更改,則只會引起重繪過程,所以重排一定引起重繪,重繪不一定引起重排
6.因為有時JS也參與DOM Tree 的構建,因而我們會先執行js再開始構建渲染樹,js腳本會阻塞Reader Tree的構建,即阻塞了頁面的渲染