您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關瀏覽器中重繪以及回流的示例分析的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
1.渲染樹(render tree)
1.瀏覽器把獲取到的HTML代碼解析成一棵DOM樹,HTML中的每個標簽(tag)都是DOM樹中的一個節點,根節點就是我們常用的document對象。DOM樹里包含了HTML所有標簽,包括display:none隱藏,還有用JS動態添加的元素等;
2.瀏覽器把所有樣式(用戶定義的css和用戶代理)解析成樣式結構體,在解析過程中會去掉瀏覽器不能識別的樣式,比如IE會去掉-moz開頭的樣式,而Firefox會去掉_開頭的樣式;
3.DOM樹和樣式結構體組合后構建render tree(渲染樹),render tree類似于DOM樹,但區別很大,render tree 能識別樣式,render tree的每一個節點都有自己的樣式,而且render tree中不包含隱藏的節點(比如display:none的節點,還有head節點),因為這些節點不會用于呈現,而且不會影響呈現。
2.重繪與回流的定義
重繪:當前元素的樣式(背景顏色、字體顏色等)發生改變的時候,我們只需要把改變的元素重新的渲染一下即可,重繪對瀏覽器的性能影響較小,所以 一般不考慮。
發生重繪的情形:改變容器的外觀風格等,比如background:black等。改變外觀,不改變布局,不影響其他的dom。
回流:是指瀏覽器為了重新渲染部分或者全部的文檔而重新計算文檔中元素的位置和幾何構造的過程。
因為回流可能導致整個dom樹的重新構造,所以是性能的一大殺手
一個元素的回流導致了其所有子元素以及DOM中緊隨其后的祖先元素的隨后的回流.
3.觸發回流的操作
1.調整窗口大小(Resizing the window)
2.改變字體(Changing the font)
3.增加或者移除樣式表(Adding or removing a stylesheet)
4.內容變化,比如用戶在input框中輸入文字(Content changes, such as a user typing text in an input box)
5.激活 CSS 偽類,比如 :hover (IE 中為兄弟結點偽類的激活)(Activation of CSS pseudo classes such as :hover (in IE the activation of the pseudo class of a sibling)
6.操作 class 屬性(Manipulating the class attribute)
7.腳本操作 DOM(A script manipulating the DOM)
8.計算 offsetWidth 和 offsetHeight 屬性(Calculating offsetWidth and offsetHeight)
9.設置 style 屬性的值 (Setting a property of the style attribute)
10.fixed定位的元素,在拖動滾動條的時候會一直回流
如何避免回流
1. 一起變化:如果要改變一個元素的樣式,可以將所有樣式集中在一個class上面一次變化,而不是變化幾次
2. 具有動畫效果請使用absolute
3. 避免使用表格布局
4. 不要使用CSS表達式
5. 在最末改變元素
6. 動畫移動時候,要控制
比如我們拖動元素時候,我是在他x或者y坐標改變5px才操作,這樣雖說降低了平滑度,但是對性能有提高
7. 如果你想讓復雜的表現發生改變,例如動畫效果,那么請在這個流動線之外實現它。使用position-absolute或position-fixed來實現它。
8. 既然計算offsetWidth也會引起回流,那么就拿一個變量保存它
9. 當我們需要向文檔中添加節點時,可以用文檔碎片的方式去解決這個問題的,當我們需要給DOM中添加新的元素的時候,先將其放在一個容器中,然后統一添加,這樣就只產生了一次回流
感謝各位的閱讀!關于“瀏覽器中重繪以及回流的示例分析”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。