回流reflow与重绘repaint
回流(reflow)與重繪(repaint)
很早之前就聽說過回流與重繪這兩個名詞,但是并不理解它們的含義,也沒有深究過,今天看了一套網易的題目,涉及到了這兩個概念,于是想要把它們倆弄清楚。。。
一、概念
首先我們要明白的是,頁面的顯示過程分為以下幾個階段:
1、生成DOM樹(包括display:none的節點)
2、在DOM樹的基礎上根據節點的集合屬性(margin,padding,width,height等)生成render樹(不包括display:none,head節點,但是包括visibility:hidden的節點)
3、在render樹的基礎上繼續渲染顏色背景色等樣式
reflow:當render樹的一部分或者全部因為大小邊距等問題發生改變而需要重建的過程,叫做回流
repaint:當諸如顏色背景等不會引起頁面布局變化,而只需要重新渲染的過程叫做重繪
通過上述定義,可以很明顯看出,重繪的代價要比回流小,畢竟重繪只涉及樣式的改變,不涉及到布局。重繪就好像給人染了一個頭發,而回流相當于給人做了一次抽脂手術
二、什么會引起回流
這也是網易題目的出法
我在別處抄來了一段代碼,嘻嘻
| 1 2 3 4 5 6 7 8 | var?s = document.body.style; s.padding =?"2px";?// 回流+重繪 s.border =?"1px solid red";?// 再一次 回流+重繪 s.color =?"blue";?// 再一次重繪 s.backgroundColor =?"#ccc";?// 再一次 重繪 s.fontSize =?"14px";?// 再一次 回流+重繪 // 添加node,再一次 回流+重繪 document.body.appendChild(document.createTextNode('abc!')); |
可以看出,回流一定伴隨著重繪,而重繪卻可以單獨出現
可以理解為,路人甲摔斷了腿或者抽脂之后,病怏怏導致頭發也變白了(回流+重繪);但是炮灰乙卻僅僅是去村口王師傅那里燙了頭(重繪)
回流對性能產生了一定的影響,盡管瀏覽器機智地幫我們進行了批處理,但是仍然存在著上述諸多闊怕的屬性,一獲取就回流。怎么解決?
三、減少回流
補充:改變字體大小會引發回流
回到網易的問題,并適當做延伸:display:none和visibility:hidden會產生回流與重繪嗎?
display:none指的是元素完全不陳列出來,不占據空間,涉及到了DOM結構,故產生reflow與repaint
visibility:hidden指的是元素不可見但存在,保留空間,不影響結構,故只產生repaint
原文鏈接點擊打開鏈接
總結
以上是生活随笔為你收集整理的回流reflow与重绘repaint的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 手机辐射危害盘点:可降低男性精子活性
- 下一篇: 随机论---生命起源随想