回流和重繪

瀏覽器解析HTML的過程

1.構建 frame, 以建立DOM樹泡嘴。

2.回流(reflow) 引起Dom樹結構變化麸祷,改變頁面布局仅父。 3.重繪(repaint) 不會引起Dom樹變化及頁面布局變化用含,只重新渲染頁面樣式

回流與重繪兩者之間的聯系在于: 觸發(fā)回流一定會觸發(fā)重繪, 而觸發(fā)重繪卻不一定會觸發(fā)回流离咐。

我們可以把頁面理解為一個黑板谱俭,黑板上有一朵畫好的小花。現在我們要把這朵從左邊(left)移到了右邊(right)宵蛀,那我們是不是要先確定好右邊的具體位置昆著,畫好形狀(回流),再畫上它原有的顏色(重繪)术陶。

但如果我們僅僅是想換給花朵換一個顏色凑懂,那么只需擦掉花朵上的顏色,再重新涂上自己期望的顏色(重繪)就可以了梧宫。

1. 回流(Reflow)

當Render Tree中部分或全部元素的尺寸,結構或者某些屬性發(fā)生改變時,瀏覽器重新渲染部分或全部文檔的過程

導致回流發(fā)生的一些因素:

  1. 瀏覽器窗口大小發(fā)生改變

  2. 元素字體大小變化

  3. 增加或者移除樣式表

  4. 內容變化接谨,比如用戶在 input 框中輸入文字, CSS3 動畫,文字數量或者圖片大小改變等

  5. 激活 CSS 偽類塘匣,比如 :hover

  6. 操作class屬性

  7. 添加或刪除可見的DOM元素

  8. 計算offsetWidthoffsetHeight屬性

  9. 設置 style 屬性的值

  10. 頁面首次渲染

  11. 元素尺寸或者位置發(fā)生改變

  12. 一些常用且會導致回流的屬性和方法:
    clientWidth,clientHeight,clientTop,clientLeft
    offsetWidth,offsetHeight,offsetTop,offsetLeft scrollWidth,scrollHeight,scrollTop,scrollLeft,scrollIntoView()

2. 重繪(Repaint)

而重繪則是視覺效果變化引起的重新繪制脓豪。比如 color 或者 background 發(fā)生了變化,那就該給觸發(fā)重繪的元素化化妝忌卤,化成它想要的樣子扫夜。

3.性能影響

回流比重繪的代價要更高

有時僅僅回流一個單一的元素,它的父元素以及任何跟隨它的元素也會產生回流

現代瀏覽器會對頻繁的回流或重繪操作進行優(yōu)化:

瀏覽器會維護一個隊列,把所有引起回流和重繪的操作放入到隊列中,如果隊列中的任務數量或者時間間隔達到一個閾值,瀏覽器會將隊列清空,進行一次批處理,這樣可以把多次回流和重繪變成一次

4.如何避免回流和重繪

CSS:

1、避免使用table布局。 2历谍、盡可能在DOM樹的最末端改變class现拒。 3、避免設置多層內聯樣式望侈。 4、將動畫效果應用到position屬性為absolute或fixed的元素上勋桶。 5脱衙、避免使用CSS表達式(例如:calc())。

JavaScript:

1例驹、避免頻繁操作樣式捐韩,最好一次性重寫style屬性,或者將樣式列表定義為class并一次性更改class屬性鹃锈。 2荤胁、避免頻繁操作DOM,創(chuàng)建一個documentFragment屎债,在它上面應用所有DOM操作仅政,最后再把它添加到文檔中。 3盆驹、也可以先為元素設置display: none圆丹,操作結束后再把它顯示出來。因為在display屬性為none的元素上進行的DOM操作不會引發(fā)回流和重繪躯喇。 4辫封、避免頻繁讀取會引發(fā)回流/重繪的屬性,如果確實需要多次使用廉丽,就用一個變量緩存起來倦微。 5、對具有復雜動畫的元素使用絕對定位正压,使它脫離文檔流欣福,否則會引起父元素及后續(xù)元素頻繁回流。

參考:回流與重繪的調試與優(yōu)化 | anran758's blog

?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末蔑匣,一起剝皮案震驚了整個濱河市劣欢,隨后出現的幾起案子,更是在濱河造成了極大的恐慌裁良,老刑警劉巖凿将,帶你破解...
    沈念sama閱讀 216,496評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異价脾,居然都是意外死亡牧抵,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 92,407評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來犀变,“玉大人妹孙,你說我怎么就攤上這事』裰Γ” “怎么了蠢正?”我有些...
    開封第一講書人閱讀 162,632評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長省店。 經常有香客問我嚣崭,道長,這世上最難降的妖魔是什么懦傍? 我笑而不...
    開封第一講書人閱讀 58,180評論 1 292
  • 正文 為了忘掉前任雹舀,我火速辦了婚禮,結果婚禮上粗俱,老公的妹妹穿的比我還像新娘说榆。我一直安慰自己,他們只是感情好寸认,可當我...
    茶點故事閱讀 67,198評論 6 388
  • 文/花漫 我一把揭開白布签财。 她就那樣靜靜地躺著,像睡著了一般废麻。 火紅的嫁衣襯著肌膚如雪荠卷。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,165評論 1 299
  • 那天烛愧,我揣著相機與錄音油宜,去河邊找鬼。 笑死怜姿,一個胖子當著我的面吹牛慎冤,可吹牛的內容都是我干的。 我是一名探鬼主播沧卢,決...
    沈念sama閱讀 40,052評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼蚁堤,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了但狭?” 一聲冷哼從身側響起披诗,我...
    開封第一講書人閱讀 38,910評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎立磁,沒想到半個月后呈队,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 45,324評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡唱歧,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,542評論 2 332
  • 正文 我和宋清朗相戀三年宪摧,在試婚紗的時候發(fā)現自己被綠了粒竖。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,711評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡几于,死狀恐怖蕊苗,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情沿彭,我是刑警寧澤朽砰,帶...
    沈念sama閱讀 35,424評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站喉刘,受9級特大地震影響锅移,放射性物質發(fā)生泄漏。R本人自食惡果不足惜饱搏,卻給世界環(huán)境...
    茶點故事閱讀 41,017評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望置逻。 院中可真熱鬧推沸,春花似錦、人聲如沸券坞。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽恨锚。三九已至宇驾,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間猴伶,已是汗流浹背课舍。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留他挎,地道東北人筝尾。 一個月前我還...
    沈念sama閱讀 47,722評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像办桨,于是被迫代替她去往敵國和親筹淫。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,611評論 2 353

推薦閱讀更多精彩內容