1 .用戶第一次訪問網(wǎng)址,瀏覽器向服務(wù)器發(fā)出請求刚夺,服務(wù)器返回html文件
2 .瀏覽器開始載入html代碼献丑,發(fā)現(xiàn)head標(biāo)簽內(nèi)有一個link標(biāo)簽引用外部css或者js文件。注意這里的icon侠姑,地址是一張圖片创橄,以及main.json是沒有發(fā)現(xiàn)在請求列表的,可能之前就有了緩存
3 .瀏覽器又發(fā)出css以及js文件請求莽红,服務(wù)器返回這個css,js文件
4 .瀏覽器繼續(xù)載入html中body部分的代碼妥畏,并且css,js文件已經(jīng)拿到手了邦邦,可以開始渲染頁面了
5 .瀏覽器在代碼中發(fā)現(xiàn)一個img標(biāo)簽引用了一張圖片,向服務(wù)器發(fā)出請求醉蚁,此時瀏覽器不會等圖片下載完燃辖,而是繼續(xù)渲染后面的代碼
6 .服務(wù)器返回圖片文件,由于圖片占用了一定面積网棍,影響了頁面布局黔龟,因此瀏覽器需要回過頭來重新渲染這部分代碼。
7 .瀏覽器發(fā)現(xiàn)了一個包含一行js代碼的script標(biāo)簽滥玷,趕快執(zhí)行他氏身。
8 .js腳本執(zhí)行了這條語句,他命令瀏覽器影藏掉代碼中的某個div惑畴,此時瀏覽器不得不重新渲染這部分代碼
9 .直到發(fā)現(xiàn)閉合的html標(biāo)簽
瀏覽器加載和渲染html的順序
1 .ie瀏覽器下載的順序是從上到下的蛋欣,渲染的順序也是從上到下,下載和渲染是同時進(jìn)行的
2 .在渲染到頁面的某一部分的時候如贷,其上面所有部分都已經(jīng)下載完成陷虎,但并不是說相關(guān)聯(lián)的元素都以下載完畢
3 .如果遇到語義解釋性的標(biāo)簽嵌入文件,那么此時ie的下載過程會啟動單獨(dú)連接進(jìn)行下載
4 .并且在下載后進(jìn)行解析杠袱,解析過程中尚猿,停止頁面所有往下元素的下載,阻塞加載
5 .后面的樣式表下載之后霞掺,將和之前的下載過的所有樣式表一起進(jìn)行解析谊路,解析完成之后,將對此前所有元素(包括已經(jīng)渲染)的元素重新渲染
6 .js,css中如果有重定義菩彬,那么后定義的函數(shù)將覆蓋前定義的函數(shù)。
js的加載
1 .不能并行下載和解析
2 .當(dāng)應(yīng)用js之后潮梯,瀏覽器會發(fā)送一個js request就會一直等待該request的返回骗灶,因?yàn)闉g覽器需要一個穩(wěn)定的dom樹結(jié)構(gòu),而js中很有可能有代碼會修改到dom樹結(jié)構(gòu)秉馏,甚至直接跳轉(zhuǎn)耙旦,瀏覽器為了防止出現(xiàn)js修改dom樹,需要重新構(gòu)建dom樹萝究,所以就會阻塞其他的下載和呈現(xiàn)
3 .行間js將阻塞所有html代碼的下載免都。