亚洲视频二区_亚洲欧洲日本天天堂在线观看_日韩一区二区在线观看_中文字幕不卡一区

公告:魔扣目錄網(wǎng)為廣大站長(zhǎng)提供免費(fèi)收錄網(wǎng)站服務(wù),提交前請(qǐng)做好本站友鏈:【 網(wǎng)站目錄:http://www.430618.com 】, 免友鏈快審服務(wù)(50元/站),

點(diǎn)擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會(huì)員:747

重繪和回流:為什么要避免頻繁發(fā)生?

在前端開(kāi)發(fā)中,我們經(jīng)常會(huì)聽(tīng)到兩個(gè)概念:重繪和回流。它們是指瀏覽器對(duì)頁(yè)面進(jìn)行渲染時(shí)的兩個(gè)關(guān)鍵過(guò)程。重繪是指當(dāng)元素的外觀發(fā)生變化,需要更新顯示時(shí)進(jìn)行的過(guò)程;回流是指當(dāng)元素的幾何屬性發(fā)生變化,需要重新計(jì)算布局并重新繪制的過(guò)程。

重繪和回流都是非常消耗性能的操作,頻繁發(fā)生會(huì)導(dǎo)致頁(yè)面的性能下降,甚至造成卡頓和頁(yè)面加載速度變慢。所以,我們?cè)陂_(kāi)發(fā)中要盡量避免頻繁發(fā)生重繪和回流。接下來(lái),讓我們來(lái)看一些常見(jiàn)的導(dǎo)致重繪和回流的情況,并介紹如何避免它們。

    避免頻繁修改 DOM 元素的樣式

當(dāng)我們頻繁修改 DOM 元素的樣式時(shí),瀏覽器會(huì)頻繁地觸發(fā)重繪和回流。因此,在修改 DOM 元素的樣式時(shí),最好將修改操作合并到一起,通過(guò)修改元素的 class 名稱來(lái)實(shí)現(xiàn)樣式切換,這樣可以減少重繪和回流的次數(shù)。

// 不推薦寫(xiě)法
var element = document.getElementById('example');
element.style.width = '100px';
element.style.height = '100px';
element.style.backgroundColor = 'red';

// 推薦寫(xiě)法
var element = document.getElementById('example');
element.classList.add('active');

登錄后復(fù)制

    使用 transform 屬性來(lái)替代 top/left 屬性

當(dāng)使用 top/left 屬性來(lái)改變?cè)氐奈恢脮r(shí),會(huì)觸發(fā)重繪和回流。而使用 transform 屬性(如 translateX/translateY)來(lái)改變?cè)氐奈恢茫瑒t不會(huì)觸發(fā)回流,只會(huì)觸發(fā)重繪。因此,在需要改變?cè)匚恢脮r(shí),最好使用 transform 屬性。

// 不推薦寫(xiě)法
var element = document.getElementById('example');
element.style.left = '100px';
element.style.top = '100px';

// 推薦寫(xiě)法
var element = document.getElementById('example');
element.style.transform = 'translate(100px, 100px)';

登錄后復(fù)制

    避免頻繁讀取元素的尺寸屬性

每次讀取元素的尺寸屬性(如 offsetWidth、offsetHeight)都會(huì)觸發(fā)回流,而且讀取這些屬性的值是比較消耗性能的操作。因此,我們應(yīng)該盡量避免頻繁讀取元素的尺寸屬性,可以將這些值緩存起來(lái),或者在必要時(shí)一次性地獲取它們。

// 不推薦寫(xiě)法
var element = document.getElementById('example');
var width = element.offsetWidth;
var height = element.offsetHeight;

// 推薦寫(xiě)法
var element = document.getElementById('example');
var rect = element.getBoundingClientRect();
var width = rect.width;
var height = rect.height;

登錄后復(fù)制

    使用 documentFragment 來(lái)優(yōu)化多次插入節(jié)點(diǎn)

插入節(jié)點(diǎn)是會(huì)觸發(fā)回流的操作,如果需要多次插入節(jié)點(diǎn),最好使用 documentFragment 來(lái)優(yōu)化,將多個(gè)節(jié)點(diǎn)添加到 documentFragment 中,然后再一次性地插入到 DOM 中。

// 不推薦寫(xiě)法
for (var i = 0; i < 10; i++) {
  var element = document.createElement('div');
  document.body.appendChild(element);
}

// 推薦寫(xiě)法
var fragment = document.createDocumentFragment();
for (var i = 0; i < 10; i++) {
  var element = document.createElement('div');
  fragment.appendChild(element);
}
document.body.appendChild(fragment);

登錄后復(fù)制

通過(guò)以上幾個(gè)方面的優(yōu)化,我們可以有效地減少重繪和回流的次數(shù),提高頁(yè)面的性能和用戶體驗(yàn)。在實(shí)際開(kāi)發(fā)中,我們還可以使用一些工具和庫(kù)來(lái)幫助我們檢測(cè)和優(yōu)化重繪和回流問(wèn)題,如 Chrome DevTools 和性能分析工具等。

總結(jié)一下,重繪和回流是影響頁(yè)面性能的重要因素,在前端開(kāi)發(fā)中要盡量避免頻繁發(fā)生。通過(guò)合并樣式修改、使用 transform 屬性、避免頻繁讀取尺寸屬性和使用 documentFragment 來(lái)優(yōu)化多次插入節(jié)點(diǎn)等方法,我們可以有效地優(yōu)化頁(yè)面性能,提升用戶體驗(yàn)。

分享到:
標(biāo)簽:回流 頻繁
用戶無(wú)頭像

網(wǎng)友整理

注冊(cè)時(shí)間:

網(wǎng)站:5 個(gè)   小程序:0 個(gè)  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會(huì)員

趕快注冊(cè)賬號(hào),推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨(dú)大挑戰(zhàn)2018-06-03

數(shù)獨(dú)一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過(guò)答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫(kù),初中,高中,大學(xué)四六

運(yùn)動(dòng)步數(shù)有氧達(dá)人2018-06-03

記錄運(yùn)動(dòng)步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績(jī)?cè)u(píng)定2018-06-03

通用課目體育訓(xùn)練成績(jī)?cè)u(píng)定