客戶(hù)端:所有可以向服務(wù)器發(fā)送請(qǐng)求的一端都是客戶(hù)端
服務(wù)器端:所有可以接受客戶(hù)端的請(qǐng)求唉锌,并且給其相應(yīng)一些內(nèi)容的都是服務(wù)器(較高的電腦)
在地址欄輸入一個(gè)網(wǎng)址闯两,到看到整個(gè)頁(yè)面秽浇,中間經(jīng)歷了哪些事情(一次完整http事務(wù)=請(qǐng)求+響應(yīng))
【http請(qǐng)求階段:向服務(wù)器發(fā)送請(qǐng)求】
- 瀏覽器首先向DNS域名解析服務(wù)器發(fā)送請(qǐng)求
- DNS反解析:根據(jù)瀏覽器請(qǐng)求地址中的域名召廷,到DNS服務(wù)器中找到對(duì)應(yīng)的服務(wù)器外網(wǎng)ip地址
- 通過(guò)找到的外網(wǎng)ip揖闸,向?qū)?yīng)的服務(wù)器發(fā)送請(qǐng)求(首先訪問(wèn)的是服務(wù)器的web站點(diǎn)管理工具:準(zhǔn)確來(lái)說(shuō)是我們先基于工具在服務(wù)器上創(chuàng)建很多服務(wù)句灌,當(dāng)有客戶(hù)端訪問(wèn)的時(shí)候夷陋,服務(wù)器會(huì)匹配出具體是那個(gè)請(qǐng)求)
- 通過(guò)URL地址中攜帶的端口號(hào),找到服務(wù)器上對(duì)應(yīng)的服務(wù)胰锌,以及服務(wù)器所管理的項(xiàng)目源文件
【http響應(yīng)階段:服務(wù)器把客戶(hù)端需要的內(nèi)容準(zhǔn)備好骗绕,并返回給客戶(hù)端】 - 服務(wù)器根據(jù)請(qǐng)求請(qǐng)求地址中的路徑名稱(chēng)、問(wèn)號(hào)傳參或者哈希值资昧,把客戶(hù)端需要的內(nèi)容準(zhǔn)備和處理
- 把準(zhǔn)備的內(nèi)容相應(yīng)給客戶(hù)端(如果請(qǐng)求是html或者css等這樣的資源文件酬土,服務(wù)器返回的是資源文件中的源代碼【不是文件】)
【瀏覽器渲染階段】 - 客戶(hù)端接收到服務(wù)器返回的源代碼,基于自己內(nèi)部的渲染引擎(內(nèi)核)開(kāi)始進(jìn)行頁(yè)面的繪制和渲染
->首先計(jì)算dom結(jié)構(gòu)格带,生成dom tree
->自上而下運(yùn)行代碼撤缴,加載css等資源內(nèi)容
->根據(jù)獲取的css生成帶樣式的render tree
->開(kāi)始渲染和繪制
一個(gè)頁(yè)面完全加載完成需要向服務(wù)器發(fā)起很多次http事務(wù)操作
一般來(lái)說(shuō):首先把html源代碼拿回來(lái)刹枉,加載html的時(shí)候,遇到link/script/img/[src]/iframe/video和audio[沒(méi)有設(shè)置preload=‘none’]...都會(huì)重新和服務(wù)器端建立http事務(wù)交互
特殊情況:如果我們做了資源緩存處理[304]腹泌,而且即將加載的資源在之前已經(jīng)加載過(guò)了嘶卧,這樣的操作和傳統(tǒng)的http事務(wù)有所不一樣,他們是從服務(wù)器和瀏覽器的緩存中讀取數(shù)據(jù)凉袱,比傳統(tǒng)的讀取快很多芥吟。
在客戶(hù)端向服務(wù)器發(fā)送請(qǐng)求,以及服務(wù)器把內(nèi)容響應(yīng)給客戶(hù)端的時(shí)候专甩,中間相互傳遞了很多內(nèi)容(客戶(hù)端把一些內(nèi)容傳遞服務(wù)器钟鸵,服務(wù)器把一些內(nèi)容響應(yīng)給客戶(hù)端),我們把傳遞的內(nèi)容統(tǒng)稱(chēng)為http報(bào)文
前端性能優(yōu)化
- 減少http請(qǐng)求的次數(shù)及請(qǐng)求內(nèi)容大械佣恪(css棺耍、js合并成一個(gè),圖片延遲种樱,css使用內(nèi)嵌式)