我們先舉個簡單的栗子「栗子」,以便幫助我們的這麼理解,
1,當render樹中的一部分(或全部)因為元素的規模尺寸、布局、顯隱等改變而需要重新構建,這就稱為回流。
當render樹中的一些元素需要更新屬性,而這些屬性只是影響元素的外觀、風格,不影響布局,比如background-color,就稱為重繪。
注意:回流必將引起重繪,而重繪不一定會引起回流。
以上,其實理解起來很容易,所謂的render樹就是識別了幾何屬性的dom樹,好像我們畫人體的時候,dom樹是先確定都有什麼,比如四肢,頭部,身體,其他器官等;而render樹則是確定這個人的高矮胖瘦,頭髮是否蓋眼睛等。如果我們在繪畫過程中發現脖子長了那就慘了,脖子下面都要重畫,如果發現只是手指畫的有問題,我們只需要重畫手指,這就是回流了。當我們的render樹完事了,也就是人體大概輪廓我們都畫好了,就可以上色了,換個髮色這種我們叫重繪。
再比如:
一 :回流何時發生?
當頁面布局和幾何屬性改變時就需要回流,下述情況會發生瀏覽器回流:
頁面渲染初始化
新增或者刪除可見的dom元素;
dom元素的幾何屬性變。
內容改變。
瀏覽器視窗尺寸改變。
獲取某些屬性
二 : 怎麼減少回流和重繪?
1、在記憶體中多次操作節點,完成後再新增到文件中去。
2、將那些改變樣式的操作集合在一起,直接改變classname。如果動態改變樣式,則使用csstext。
3、將需要多次重排的元素,脫離文件流。
4、盡量不要使用**布局。
5、讓要操作的元素進行」離線處理」,處理完後一起更新。
6、在需要經常取那些引起瀏覽器重排的屬性值時,要快取到變數。
什麼是回流和重繪
當渲染樹中的一部分或者全部因為元素的尺寸 布局 隱藏等改變而需要重新構建的時候,這時候就會發生回流。每個頁面都至少發生一次回流,也就是頁面第一次載入的時候。在回流的時候,瀏覽器會使渲染樹中受到影響的元素部分失效,並重新繪製這個部分的渲染樹,完成回流以後,瀏覽器會重新繪製受到影響的部分元素到螢幕中,這...
回流和重繪
在頁面載入時,瀏覽器把獲取到的html 解析成1個dom樹,dom樹里包含了所有html標籤,包括display none隱藏,還有用js動態新增的元素等。瀏覽器把所有樣式 使用者定義的css和使用者 解析成樣式結構體 dom tree 和樣式結構體組合後構建render tree 渲染樹 然後根據...
回流和重繪
html 載入過程 在頁面載入時,瀏覽器把獲取到的html 解析成1個dom樹,dom樹里包含了所有html標籤,包括display none隱藏,還有用js動態新增的元素等。瀏覽器把所有樣式 使用者定義的css和使用者 解析成樣式結構體 dom tree 和樣式結構體組合後構建render tre...