1. 程式人生 > >從輸入url到頁面載入完成的過程中都發生了什麼?(針對前端)

從輸入url到頁面載入完成的過程中都發生了什麼?(針對前端)

1、輸入url地址後,瀏覽器查詢域名的IP地址,這一步涉及到DNS的解析; 2、當解析完成找到目標伺服器,瀏覽器會向web伺服器傳送一個http請求; 3、伺服器接受並處理http請求; 4、伺服器構造併發送響應報文; 5、瀏覽器 接收報文開始構建html頁面; 6、瀏覽器傳送靜態資源請求,具體步驟略,伺服器會把一些圖片視訊等資源返回給瀏覽器; 7、瀏覽器傳送Ajax請求; 8、頁面構建完成; 注:其中瀏覽器構建頁面的時候有這樣幾個步驟: 解析html構建DOM樹->構建render樹->佈局render樹 ->繪製render樹

渲染引擎開始解析html,並將標籤轉化為內容樹中的dom節點。接著,它解析外部CSS檔案及style標籤中的樣式資訊。這些樣式資訊以及html中的可見性指令將被用來構建另一棵樹——render樹。

Render樹由一些包含有顏色和大小等屬性的矩形組成,它們將被按照正確的順序顯示到螢幕上。

Render樹構建好了之後,將會執行佈局過程,它將確定每個節點在螢幕上的確切座標。再下一步就是繪製,即遍歷render樹,並使用UI後端層繪製每個節點。

值得注意的是,這個過程是逐步完成的,為了更好的使用者體驗,渲染引擎將會盡可能早的將內容呈現到螢幕上,並不會等到所有的html都解析完成之後再去構建和佈局render樹。它是解析完一部分內容就顯示一部分內容,同時,可能還在通過網路下載其餘內容。

從圖3和4中可以看出,儘管webkit和Gecko使用的術語稍有不同,他們的主要流程基本相同。Gecko稱可見的格式化元素組成的樹為frame樹,每個元素都是一個frame,webkit則使用render樹這個名詞來命名由渲染物件組成的樹。Webkit中元素的定位稱為佈局,而Gecko中稱為迴流。Webkit稱利用dom節點及樣式資訊去構建render樹的過程為attachment,Gecko在html和dom樹之間附加了一層,這層稱為內容接收器,相當製造dom元素的工廠。下面將討論流程中的各個階段。