有關javascript的效能最佳化 (repaint和reflow)

來源:互聯網
上載者:User

複製代碼 代碼如下: repaint(重繪) ,repaint發生更改時,元素的外觀被改變,且在沒有改變布局的情況下發生,如改變outline,visibility,background color,不會影響到dom結構渲染。

reflow(渲染),與repaint區別就是他會影響到dom的結構渲染,同時他會觸發repaint,他會改變他本身與所有父輩元素(祖先),這種開銷是非常昂貴的,導致效能下降是必然的,頁面元素越多效果越明顯。

何時發生:
. DOM元素的添加、修改(內容)、刪除( Reflow + Repaint)
. 僅修改DOM元素的字型顏色(只有Repaint,因為不需要調整布局)
. 應用新的樣式或者修改任何影響元素外觀的屬性
. Resize瀏覽器視窗、滾動頁面
. 讀取元素的某些屬性(offsetLeft、offsetTop、offsetHeight、offsetWidth、 scrollTop/Left/Width/Height、clientTop/Left/Width/Height、 getComputedStyle()、currentStyle(in IE))

如何避免:
. 先將元素從document中刪除,完成修改後再把元素放回原來的位置
. 將元素的display設定為”none”,完成修改後再把display修改為原來的值
. 如果需要建立多個DOM節點,可以使用DocumentFragment建立完後一次性的加入document   

var fragment = document.createDocumentFragment();
fragment.appendChild(document.createTextNode('keenboy test 111'));
fragment.appendChild(document.createElement('br'));
fragment.appendChild(document.createTextNode('keenboy test 222'));
document.body.appendChild(fragment);
. 集中修改樣式
  4.1儘可能少的修改元素style上的屬性
  4.2盡量通過修改className來修改樣式
  4.3通過cssText屬性來設定樣式值
    element.style.width=”80px”; //reflow
    element.style.height=”90px”; //reflow
    element.style.border=”solid 1px red”; //reflow
    以上就產生多次reflow,調用的越多產生就越多
    element.style.cssText=”width:80px;height:80px;border:solid 1px red;”; //reflow 
  4.4緩衝Layout屬性值
    var left=elem.offsetLeft; 多次使用left也就產生一次reflow
  4.5設定元素的position為absolute或fixed
    元素脫離標準流,也從DOM樹結構中脫離出來,在需要reflow時只需要reflow自身與下級元素
  4.6盡量不要用table布局
    table元素一旦觸發reflow就會導致table裡所有的其它元素 reflow。在適合用table的場合,可以設定table-layout為auto或fixed,這樣可以讓table一行一行的渲染,這種做法也是為了限制reflow的影響範圍
  4.7避免使用expression,他會每次調用都會重新計算一遍(包括載入頁面)

參考:

Yahoo! 效能工程師 Nicole Sullivan 在最新的文章 《Reflows & Repaints: CSS Performance making your JavaScript slow?》

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.