1.輸入一個URL到頁面過程中發(fā)生了什么?
1.首先在瀏覽器中輸入URL
2.查找緩存,首先先查看瀏覽器緩存-系統(tǒng)緩存-路由緩存這個順序中查找是否有該地址,如果有則顯示頁面內(nèi)容,沒有則進(jìn)行下一步
3.DNS域名解析:瀏覽器向DNS服務(wù)器發(fā)起請求,解析該URL種域名對應(yīng)的IP地址(DNS服務(wù)器基于UDP,因此會用到UDP協(xié)議)
4.建立TCP連接:解析出IP地址后,根據(jù)IP地址和默認(rèn)80端口,和服務(wù)器建立TCP連接
5.發(fā)起HTTP請求:瀏覽器發(fā)起讀取文件的HTTP請求,該請求報文作為TCP三次握手的第三次數(shù)據(jù)發(fā)送給服務(wù)器
6.服務(wù)器響應(yīng)請求并返回結(jié)果:服務(wù)器對瀏覽器請求做出響應(yīng),并把對應(yīng)的html文件發(fā)送給瀏覽器
7.關(guān)閉TCP連接:通過四次揮手釋放TCP連接
8.瀏覽器渲染:瀏覽器解析HTML內(nèi)容并渲染出來,瀏覽器接收到數(shù)據(jù)包后的解析流程為
- 構(gòu)建DOM樹:詞法分析然后解析成DOM樹,由dom元素及屬性節(jié)點(diǎn)組成,樹的根是document對象
- 構(gòu)建css規(guī)則樹:生成css規(guī)則樹
- 構(gòu)建render樹:瀏覽器將DOM和CSSOM結(jié)合,并構(gòu)建出渲染樹
*布局:計算出每個節(jié)點(diǎn)在屏幕中的位置 - 繪制:遍歷render樹,并使用UI后端層繪制每個節(jié)點(diǎn)
2.vue生命周期
create階段:vue實(shí)例被創(chuàng)建 beforeCreate:創(chuàng)建前,此時data和methods中的數(shù)據(jù)都還沒有初始化;created:創(chuàng)建完畢,data中有值,未掛載
mount階段:vue實(shí)例被掛載到真實(shí)DOM節(jié)點(diǎn) beforeMount:可以發(fā)起服務(wù)器請求;mounted:此時可以操作DOM
update階段:當(dāng)vue實(shí)例里面的data數(shù)據(jù)發(fā)生變化時,觸發(fā)組件的重新渲染(beforeUpdate updated)
destory階段:vue實(shí)例被銷毀 beforeDestroy:實(shí)例被銷毀前 destroyed
3.vue2.0和vue3.0有什么區(qū)別
1.響應(yīng)式系統(tǒng)的重新配置,雙向數(shù)據(jù)綁定的原理不同,使用es6的ProxyAPI(代理)替換對象.define屬性。使用代理優(yōu)勢
- 可直接監(jiān)控列類型的數(shù)據(jù)變化
*監(jiān)聽的對象是對象本身,不需要像Object.defineProperty那樣遍歷每個屬性,有一定的性能提升 - 省去for循環(huán),閉包等內(nèi)容來提升效率
- 直接添加對象屬性/刪除
- 直接監(jiān)聽數(shù)組,不需要再去單獨(dú)對數(shù)組做特異性操作
2.支持碎片(多個根節(jié)點(diǎn))
vue2不支持碎片,而vue3支持