現今比較容易影響前端效能大多是 JavaScript ,操作大量 DOM 確實會給瀏覽器較大的負擔。而變更 CSS 也有造成效能的兩大元凶: 重排(回流)( Reflow)和 重繪( Repaint ),今天就來介紹一下這兩個名詞吧。 瀏覽器如何渲染畫面? 在開始介紹兩個名詞之前,要先了解瀏覽器如何渲染畫面的,才能知道這兩個名詞分別在渲染的哪個步驟以及他們的工作。 從 HTML 解析出 DOM 樹 從 CSS 解析出 CSSOM 樹 兩者組合出 Render TREE 計算出 Render 樹每個元素的位置、大小,以及每個節點畫面上的座標 實際將結果繪製到畫面上 DOM 樹雖然和 Render 樹很相似,但 Render 知道樣式的設定,例如把一個 div 的 display 屬性設定為 none,這個 div 在 Render 樹就不會出現。 重排(回流)(Reflow) Reflow 會根據 Render 樹逐步計算每個元素的位置座標、大小,以及其是否顯示的屬性等,與這類屬性有關的物件操作都會觸發 Reflow,以下有一些簡單的舉例: