瀏覽器的迴流、重繪和FOUC

要了解什麼是迴流和重繪,首先要知道一個頁面是如何在瀏覽器中渲染的。

瀏覽器渲染頁面步驟

  1. 瀏覽器把HTML解析成DOM樹;把CSS解析成CSSOM樹
  2. DOM樹和CSSOM樹合併成render樹
  3. 根據renderTree來佈局,計算每個節點的大小位置信息
  4. 將renderTree各個節點繪製到屏幕上

重繪repaint

當頁面中元素樣式的改變並不影響它在文檔流中的位置時(例如:colorbackground-colorvisibility等),瀏覽器會將新樣式賦予給元素並重新繪製它,這個過程稱爲重繪。

重繪不會引起其他dom的重新繪製

迴流reflow

Render Tree中部分或全部元素的尺寸、結構、或某些屬性發生改變時(文檔流位置改變),瀏覽器重新渲染部分或全部文檔的過程稱爲迴流。

區別

迴流一定會引起重繪,重繪不規定觸發迴流

什麼是FOUC(Flash of unstyled content)

fouc簡稱無樣式內容閃爍。瀏覽器表現就是頁面出現無樣式dom,或者部分樣式dom。突然又恢復正常樣式

原因:

  1. 使用import方法導入樣式表。
  2. 將樣式表放在頁面底部
  3. 有幾個樣式表,放在html結構的不同位置。

css和js都會阻塞渲染

js使用defer和async改變阻塞

defer

有序,不改變script中代碼執行順序。

defer 與相比普通 script,有兩點區別:

  1. 載入 JavaScript 文件時不阻塞 HTML 的解析
  2. 執行階段被放到 HTML 標籤解析完成之後。

async

異步,無序(加載好就執行)

與 defer 的區別在於,如果已經加載好,就會開始執行——無論此刻是 HTML 解析階段還是 DOMContentLoaded 觸發之後;一定在load之前

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章