在瀏覽器中,當我們改變了一個元素的尺寸、位置、顏色等任何屬性時,都會引起瀏覽器對頁面進行重新計算和渲染操作。其中,這兩個階段稱為CSS回流(reflow)和重繪(repaint)。
CSS回流是指當DOM元素的尺寸、佈局或位置改變時,瀏覽器需要重新計算元素的幾何屬性,並重新建構頁面的渲染樹。回流一定會發生重繪,但重繪不一定會觸發回流。
CSS重繪是指當元素樣式的變化不影響佈局時,瀏覽器只需要重新繪製元素即可,而不用重新計算佈局。例如,改變元素顏色的操作只會發生重繪,不會觸發回流。
由於回流和重繪都需要瀏覽器重新計算和渲染頁面,所以它們都會帶來效能上的損耗。因此,在寫入程式碼時,應盡量避免頻繁的回流和重繪,可以採取以下最佳化措施:
- #避免頻繁修改DOM樣式。
- 使用transform來取代top/left等導致回流的操作。
- 使用文件片段(DocumentFragment)進行DOM操作,最後再一次加入到文件中。
- 避免使用CSS表達式,因為它們會使瀏覽器每次都重新計算。
- 避免頻繁讀取佈局資訊或使用offset系列等屬性,它們會強制瀏覽器進行回流。
總之,合理編寫程式碼和減少回流重繪操作可以提高頁面效能和使用者體驗。