從輸入url到頁面載入完成的過程中都發生了什麼?(針對前端)
阿新 • • 發佈:2019-01-25
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元素的工廠。下面將討論流程中的各個階段。