今天我們來了解一下什么是回流和重繪,先來看一下官方定義:
回流(reflow):對(duì)于DOM結(jié)構(gòu)中的各個(gè)元素都有自己的盒子模型,這些都需要瀏覽器根據(jù)各種樣式(瀏覽器的、開發(fā)人員定義的等)來計(jì)算并根據(jù)計(jì)算結(jié)果將元素放到它該出現(xiàn)的位置,這個(gè)過程稱之為reflow ;
重繪(repaint):當(dāng)各種盒子的位置、大小以及其他屬性,例如顏色、字體大小等都確定下來后,瀏覽器于是便把這些元素都按照各自的特性繪制了一遍,于是頁面的內(nèi)容出現(xiàn)了,這個(gè)過程稱之為repaint。
其實(shí)簡(jiǎn)單的說:
回流(reflow)就是元素的位置發(fā)生了改變(不管是添加、刪除元素,還是元素尺寸改變),會(huì)觸發(fā)回流。比如,這里有2個(gè)p標(biāo)簽,我們想在兩個(gè)p標(biāo)簽之間插入另外一個(gè)p標(biāo)簽
這個(gè)時(shí)候老大還是老大,插入一個(gè)新老二之后,原來的老二變成了老三,位置發(fā)生了改變會(huì)觸發(fā)回流。
那么重繪(repaint)簡(jiǎn)單的說,元素位置不會(huì)發(fā)生改變,視覺效果會(huì)有所改變。
元素的位置沒有發(fā)生改變,只有文字顏色做了修改,這個(gè)時(shí)候就發(fā)生了重繪。知道了回流和重繪,我們?cè)谧鲰?xiàng)目的過程中,要盡量避免,這樣可以使我們寫出高性能的DOM。例如:我們?cè)诮o元素添加樣式修飾時(shí),避免一條條更改
可以將修飾放入一個(gè)class名中,做一次class名插入
還有我們要循環(huán)插入很多DOM元素時(shí),可以使用documentFragment
回流和重繪這都是我們經(jīng)常做的一些操作,快快動(dòng)手試起來吧!更多關(guān)于前端培訓(xùn)的問題,歡迎咨詢千鋒教育在線名師。千鋒教育擁有多年IT培訓(xùn)服務(wù)經(jīng)驗(yàn),采用全程面授高品質(zhì)、高體驗(yàn)培養(yǎng)模式,擁有國(guó)內(nèi)一體化教學(xué)管理及學(xué)員服務(wù),助力更多學(xué)員實(shí)現(xiàn)高薪夢(mèng)想。
注:本文部分文字和圖片來源于網(wǎng)絡(luò),如有侵權(quán),請(qǐng)聯(lián)系刪除。版權(quán)歸原作者所有!