回流Reflow和重繪Repaint

2021-10-24 14:23:52 字數 1033 閱讀 7032

在了解回流和重繪之前,我們先來了解一下瀏覽器是如何進行解析的

我將它歸納為四個步驟:

解析html(或者是js通過createelement)生成dom樹

解析css,繪製上面是dom樹(注意!此時還未掛載到瀏覽器上)

將dom樹掛載在瀏覽器上,計算各個dom具體點的座標,以及布局和大小(回流)

在瀏覽器上繪製已經生成的dom樹(重繪)

回流的成本比重繪的成本高很多很多!!! 乙個節點的重流,可能會導致子節點或者父節點以及同級節點的重流 如果電腦低的話 會造成卡頓和更耗電

那說到現在,我們該如何去優化,使得回流和重繪對效能的影響減低到最小

我給出以下幾點建議:

不要一行行的**對dom的樣式進行修改,我們可以預先定義好某乙個類的樣式,直接給dom新的類名

我們將documentfragment作為乙個暫時的dom節點儲存器,在裡面進行修改dom(下面有關於documentfragment詳細描述)

先將dom變成display:none 再進行修改 這個過程只有一次重繪

盡量為動畫的dom設定固定定位或者絕對定位,那麼修改他們的樣式會大大減少回流

盡量少用table布局 因為這種布局 很可能小小改動,造成重新布局

documentfragment 表示乙個沒有父級檔案的最小文件物件。

它被當做乙個輕量版的 document使用,

用於儲存已排好版的或尚未打理好格式的xml片段。

最大的區別是因為documentfragment不是真實dom樹的一部分,

它的變化不會引起dom樹的重新渲染的操作(reflow)

且不會導致效能等問題。

使用documentfragment能解決直接操作dom引發大量回流的問題,

time是直接新增dom time1是利用documentfragment

Reflow 回流 和Repaint 重繪

首先我們要明白的是,頁面的顯示過程分為以下幾個階段 1 生成dom樹 包括display none的節點 2 在dom樹的基礎上根據節點的集合屬性 margin,padding,width,height等 生成render樹 不包括display none,head節點,但是包括visibility...

回流 reflow 和重繪 repaint

首先先介紹瀏覽器解析的工作原理 1.解析html文件建立dom樹 2.解析css 包含外部css以及js生成的 構建渲染樹,計算出節點的樣式 3.布局渲染樹,以根節點遞迴呼叫,計算每乙個節點的大小,位置等,給出每乙個節點出現在螢幕的精準目標 4.繪製渲染樹,遍歷渲染樹,每個幾點使用ui後端層來繪製 ...

reflow 回流 和repaint 重繪

dom節點中的各個元素都是以盒模型的形式存在,這些都需要瀏覽器去計算其位置和大小等,這個過程稱為reflow 當盒模型的位置,大小以及其他屬性,如顏色,字型,等確定下來之後,瀏覽器便開始繪製內容,這個過程稱為repaint。頁面在首次載入時必然會經歷reflow和repaint。reflow和rep...