回流和重繪

  • 回流(必定產(chǎn)生重繪)
    渲染樹中的元素因尺寸、布局、顯隱的改變重新構(gòu)建,產(chǎn)生回流
    每頁至少需一次回流(加載時)
    發(fā)生時,渲染樹中受影響的部分(和后面的元素)被重新構(gòu)造

    1. 調(diào)整窗口的大小
    2. 改變字體,如果用rem 設(shè)置了根目錄的字體大小,這樣就減少了回流的次數(shù)
    3. 增加或者移除樣式表
    4. 內(nèi)容的變化,用戶在input中輸入了文字(這是不可避免的)
    5. 激活CSS的偽類
    6. 操作class屬性
    7. 基本操作DOM(包括js中的domcument等)
    8. 計算offsetWidth與offsetHeight 屬性,獲取元素在窗口中的位置
    9. 在html代碼中直接設(shè)置 style 屬性的值,這個降低了代碼的利用率,還影響性能
  • 重繪(不一定產(chǎn)生回流)
    渲染樹中的元素更新不影響布局和尺寸的可見屬性(background、visibility)等時,產(chǎn)生重繪

  • 如何減少
    減少對渲染樹的操作(合并多次多DOM和樣式的修改)和對一些style值的請求

    1. 對尺寸、布局改動頻繁的元素abosolute或fixed定位,使之脫離渲染樹
    2. 樣式表放在head標(biāo)簽中,腳本放在body結(jié)束前。
    3. 避免多次獲取、操作dom節(jié)點
    4. 修改元素的class而不是直接操作樣式
  • 例子
    top/left是布局類的樣式,這個樣式的變化會導(dǎo)致回流 - 即指對這些節(jié)點以及受這些節(jié)點影響的其它節(jié)點,進(jìn)行CSS計算->布局->重繪過程,這個過程的前2步是消耗大量資源的
    translate導(dǎo)致重繪- 即在屏幕上重新畫一下,不會進(jìn)行CSS計算和布局這2個性能大戶,所以我們認(rèn)為translate性能上要明顯好于top/left

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容