- 首先瀏覽器主進程接管,開了一個下載線程。
- 而後進行HTTP請求(DNS查詢、IP尋址等等),中間會有三次捂手,等待響應,開始下載響應報文。
- 將下載完的內容轉交給Renderer進程管理。
- Renderer進程開始解析css rule tree和dom tree,這兩個過程是並行的,因此通常我會把link標籤放在頁面頂部。
- 解析繪製過程當中,當瀏覽器遇到link標籤或者script、img等標籤,瀏覽器會去下載這些內容,遇到時候緩存的使用緩存,不適用緩存的從新下載資源。
- css rule tree和dom tree生成完了以後,開始合成render tree,這個時候瀏覽器會進行layout,開始計算每個節點的位置,而後進行繪製。
- 繪製結束後,關閉TCP鏈接,過程有四次揮手。
以及爲何CSS和JS的位置會影響頁面效率css
css在加載過程當中不會影響到DOM樹的生成,可是會影響到Render樹的生成,進而影響到layout,因此通常來講,style的link標籤須要儘可能放在head裏面,由於在解析DOM樹的時候是自上而下的,而css樣式又是經過異步加載的,這樣的話,解析DOM樹下的body節點和加載css樣式能儘量的並行,加快Render樹的生成的速度。瀏覽器
js腳本應該放在底部,緣由在於js線程與GUI渲染線程是互斥的關係,若是js放在首部,當下載執行js的時候,會影響渲染行程繪製頁面,js的做用主要是處理交互,而交互必須得先讓頁面呈現才能進行,因此爲了保證用戶體驗,儘可能讓頁面先繪製出來。緩存