曾經有面試題是這樣的:"描述在瀏覽器的地址欄中輸入:http://www.baidu.com 後發生了什麼?"。css
一、服務端返回baidu頁面資源,瀏覽器載入htmlhtml
二、瀏覽器開始解析面試
三、發現link,發送請求載入css文件瀏覽器
四、瀏覽器渲染頁面緩存
五、發現圖片,發送請求載入圖片,並從新渲染服務器
六、發送請求js文件,阻塞渲染。若是js對dom進行了操做,則會進行rerenderdom
對於支持離線存儲的頁面,瀏覽器和服務器的交互又是如何呢?spa
首次載入頁面:htm
1-6 : 同上圖片
7:請求頁面中須要緩存的頁面和數據,就算在以前的步驟中已經請求過(這是個耗能的地方)
8:服務器返回全部請求文件,瀏覽器進行本地存儲
再次載入頁面:
1:發送請求
2:使用本地存儲的離線文件
3:解析頁面
4:請求服務端的manifest文件,判斷是否有改變,返回304則表示沒有改變進入步驟5,不然進入步驟6
5:進入首次載入頁面的7-8
6:使用本地存儲,不從新請求