2022-06-04 分類: 網(wǎng)站建設(shè)
重繪:當(dāng)頁(yè)面元素樣式的改變不影響布局時(shí),瀏覽器重新對(duì)元素進(jìn)行更新的過程叫做重繪。
重排:當(dāng)頁(yè)面元素的尺寸、結(jié)構(gòu)、或某些屬性發(fā)生改變時(shí),瀏覽器重新渲染部分或全部文檔的過程叫做重排也叫做回流。
DOM:描述該頁(yè)面的結(jié)構(gòu)
render:描述 DOM 節(jié)點(diǎn) (nodes) 在頁(yè)面上如何呈現(xiàn)
當(dāng) DOM 元素的屬性發(fā)生變化 (如 color) 時(shí), 瀏覽器會(huì)通知 render 重新描繪相應(yīng)的元素, 此過程稱為 repaint。
如果該次變化涉及元素布局 (如 width), 瀏覽器則拋棄原有屬性, 重新計(jì)算并把結(jié)果傳遞給 render 以重新描繪頁(yè)面元素, 此過程稱為 reflow。
這兩個(gè)過程是很耗費(fèi)瀏覽器性能的, 從 IE 系列和 Chrome 渲染頁(yè)面速度上的差距即可看出渲染引擎計(jì)算對(duì)應(yīng)值和呈現(xiàn)并不一定高效, 而每次對(duì)元素的操作都會(huì)發(fā)生 repaints 或 reflow, 因此編寫 DOM 交互時(shí)如果不注意就會(huì)導(dǎo)致頁(yè)面性能低下
1.解析HTML代碼并生成一個(gè) DOM 樹。
2.解析CSS文件,順序?yàn)椋簽g覽器默認(rèn)樣式->自定義樣式->頁(yè)面內(nèi)的樣式。
3.生成一個(gè)渲染樹(render tree)。這個(gè)渲染樹和DOM樹的不同之處在于,它是受樣式影響的。它不包括那些不可見的節(jié)點(diǎn)。
4.當(dāng)渲染樹生成之后,瀏覽器就會(huì)在屏幕上“畫”出所有渲染樹中的節(jié)點(diǎn)。
不管頁(yè)面發(fā)生了重繪還是重排,它們都會(huì)影響性能(最可怕的是重排 ,應(yīng)盡量避免)
頁(yè)面初始渲染
添加/刪除可見DOM元素
改變?cè)匚恢?/p>
改變?cè)爻叽纾▽?、高、?nèi)外邊距、邊框等)
改變?cè)貎?nèi)容(文本或圖片等)
改變窗口尺寸
由于回流和重繪會(huì)帶來很大的性能開銷,所以在開發(fā)中我們要盡量避免或減少回流和重繪的次數(shù)來提高性能
1. 避免頻繁讀取會(huì)引發(fā)回流/重繪的屬性,如果確實(shí)需要多次使用,就用一個(gè)變量緩存起來。
2. 對(duì)具有復(fù)雜動(dòng)畫的元素使用絕對(duì)定位,使其脫離文檔流,否則會(huì)引起父元素及后續(xù)元素頻繁回流。
3. 要避免頻繁的去操作DOM,可以通過創(chuàng)建documentFragment,完成所有所有DOM操作后,最后再把它添加到文檔中。
4. 避免頻繁操作樣式,最好一次性重寫style屬性,或者將樣式列表定義為class并一次性更改class屬性。
var curLeft=div.offsetLeft;
var curTop=div.offsetTop;
div.style.left=curLeft+1+’px’;
div.style.top=curTop+1+’px’;
重繪的性能開銷較低,重排的性能開銷較高;
回流(重排)一定會(huì)觸發(fā)重繪,而重繪不一定會(huì)回流(重排)
本文標(biāo)題:什么是重繪和重排,它們的區(qū)別是什么?
URL地址:http://www.rwnh.cn/news/163313.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站內(nèi)鏈、小程序開發(fā)、建站公司、移動(dòng)網(wǎng)站建設(shè)、商城網(wǎng)站、動(dòng)態(tài)網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容