流程:解析html以及構(gòu)建dom樹 -> 構(gòu)建render樹 -> 布局render樹 -> 繪制render樹
概念:1.構(gòu)建DOM樹: 渲染引擎解析HTML文檔框都,首先將標(biāo)簽轉(zhuǎn)換成DOM樹中的DOM node(包括js生成的標(biāo)簽)生成內(nèi)容樹
2.構(gòu)建渲染樹: 解析對(duì)應(yīng)的css樣式文件信息(包括js生成的樣式和外部的css)
3.布局渲染樹:從根節(jié)點(diǎn)遞歸調(diào)用,計(jì)算每一個(gè)元素的大小为流,位置等撵摆。給出每個(gè)節(jié)點(diǎn)所在的屏幕的精準(zhǔn)位置
4.繪制渲染樹:遍歷渲染樹哄酝,使用UI后端層來繪制每一個(gè)節(jié)點(diǎn)
重繪:當(dāng)盒子的位置崇呵、大小以及其他屬性江掩,例如顏色、字體大小等到確定下來之后核畴,瀏覽器便把這些顏色都按照各自的特性繪制一遍膝但,將內(nèi)容呈現(xiàn)在頁(yè)面上
觸發(fā)重繪的條件:改變?cè)赝庥^屬性。如:color谤草,background-color等
重繪是指一個(gè)元素外觀的改變所觸發(fā)的瀏覽器行為跟束,瀏覽器會(huì)根據(jù)元素的新屬性重新繪制,使元素呈現(xiàn)新的外觀
注意:table及其內(nèi)部元素需要多次計(jì)算才能確定好其在渲染樹中節(jié)點(diǎn)的屬性值丑孩,比同等元素要多發(fā)時(shí)間泳炉,要盡量避免使用table布局
重排(重構(gòu)/回流/reflow): 當(dāng)渲染書中的一部分(或全部)因?yàn)樵氐囊?guī)模尺寸,布局嚎杨,隱藏等改變而需要重新構(gòu)建花鹅,這就是回流。
每個(gè)頁(yè)面都需要一次回流枫浙,就是頁(yè)面第一次渲染的時(shí)候
重排一定會(huì)影響重繪刨肃,但是重繪不一定會(huì)影響重排