重繪與迴流
阿新 • • 發佈:2018-12-10
重繪:當渲染樹中的元素外觀(如:顏色)發生改變,不影響佈局時,產生重繪
迴流:當渲染樹中的元素的佈局(如:尺寸、位置、隱藏/狀態)發生改變時,產生重繪(迴流)
注意:JS獲取Layout屬性值(如:offsetLeft、scrollTop、getComputedStyle等)也會引起迴流。因為瀏覽器需要通過迴流計算最新值。
迴流必將引起重繪,而重繪不一定會引起迴流。
如何最小化repaint和reflow?
- 要對元素進行復雜操作時,可以先隱藏(display:“none”),操作完成後再顯示
- 需建立多個DOM節點時,使用DocumentFragment建立完成後一次性的加入document
- 快取Layout屬性值,如:var left=elem.offsetLeft;這樣,多次使用left值產生一次迴流;
- 儘量避免使用table佈局(table元素一旦觸發迴流就會導致table裡所有的其它元素迴流)
- 避免使用CSS表示式,因為每次呼叫都會重新計算值(包括載入頁面)
- 儘量使用CSS屬性簡寫,如:用border代替border-width,border-style等
- 批量修改元素樣式:elem.className和elem.style.cssText代替elem.style.xxx