儘可能不要變更高層的DOM元素,而以底層DOM元素的變更代替;再好比,重繪table
佈局和flex
佈局,開銷都會比較大。javascript
var foo = document.getElementById('foobar'); foo.style.color = 'blue'; foo.style.marginTop = '30px';
上面的代碼只會致使一次重繪,由於瀏覽器會累積DOM變更,而後一次性執行。java
提升性能:瀏覽器
window.requestAnimationFrame()
,由於它能夠把代碼推遲到下一次重流時執行,而不是當即要求頁面重流// 重繪代價高 function doubleHeight(element) { var currentHeight = element.clientHeight; element.style.height = (currentHeight * 2) + 'px'; } all_my_elements.forEach(doubleHeight); // 重繪代價低 function doubleHeight(element) { var currentHeight = element.clientHeight; window.requestAnimationFrame(function () { element.style.height = (currentHeight * 2) + 'px'; }); } all_my_elements.forEach(doubleHeight);