https://github.com/skyline75489/what-happens-when-zh_CN
渲染進(jìn)程
Chrome 的默認(rèn)策略是步咪,每個(gè)標(biāo)簽對(duì)應(yīng)一個(gè)渲染進(jìn)程。但如果從一個(gè)頁面打開了另一個(gè)新頁面叹洲,而新頁面和當(dāng)前頁面屬于同一站點(diǎn)的話,那么新頁面會(huì)復(fù)用父頁面的渲染進(jìn)程鲁纠。官方把這個(gè)默認(rèn)策略叫 process-per-site-instance总棵。
同一站點(diǎn):根域名加上HTTP/HTTPS協(xié)議,即不同協(xié)議的同一域名不是同一站點(diǎn)房交。
小知識(shí)點(diǎn)
- 下載是由瀏覽器進(jìn)程進(jìn)行管理的
- 等到瀏覽器進(jìn)程向渲染進(jìn)程提交文檔階段時(shí)彻舰,頁面內(nèi)容才會(huì)被替換(觸發(fā)當(dāng)前頁的卸載事件和收集需要釋放內(nèi)存)
- 重定向返回的響應(yīng)也會(huì)被緩存,301為永久重定向候味,302為臨時(shí)重定向,永久重定向會(huì)引發(fā)一些問題隔心,可以通過消除瀏覽器緩存進(jìn)行修復(fù)
整體過程
- 首先白群,用戶從瀏覽器進(jìn)程里輸入請(qǐng)求信息;
- 然后硬霍,網(wǎng)絡(luò)進(jìn)程發(fā)起 URL 請(qǐng)求帜慢;
- 服務(wù)器響應(yīng) URL 請(qǐng)求之后,瀏覽器進(jìn)程就又要開始準(zhǔn)備渲染進(jìn)程了唯卖;
- 渲染進(jìn)程準(zhǔn)備好之后粱玲,需要先向渲染進(jìn)程提交頁面數(shù)據(jù),我們稱之為提交文檔階段拜轨;
- 渲染進(jìn)程接收完文檔信息之后抽减,便開始解析頁面和加載子資源,完成頁面的渲染橄碾。
詳細(xì)過程
地址欄獲取到輸入信息
判斷輸入信息卵沉,如果為文字則由瀏覽器默認(rèn)搜索引擎加工文字為完整URL,如果為URL請(qǐng)求就加上協(xié)議頭組成完整的URL
瀏覽器進(jìn)程通過IPC(進(jìn)程間通信)把URL請(qǐng)求發(fā)送到網(wǎng)絡(luò)進(jìn)程
查詢本地緩存法牲,有緩存就直接返回資源史汗,沒有緩存則繼續(xù)
進(jìn)行DNS解析,和服務(wù)器建立TCP連接
構(gòu)建請(qǐng)求行拒垃、請(qǐng)求頭(包含COOKIES)停撞、請(qǐng)求體
發(fā)送請(qǐng)求
接收服務(wù)器返回的響應(yīng)
-
如果響應(yīng)行的狀態(tài)碼為301/302,表明重定向悼瓮,從響應(yīng)頭的Location字段獲得地址戈毒,根據(jù)此地址重新進(jìn)行DNS解析,建立TCP連接谤牡,再發(fā)送請(qǐng)求
響應(yīng)行的狀態(tài)碼為200時(shí)副硅,表明成功,瀏覽器繼續(xù)執(zhí)行下面的操作
根據(jù)響應(yīng)頭中的Content-Type屬性執(zhí)行不同的操作翅萤,比如為text/html時(shí)則為HTML恐疲,為application/octet-stream時(shí)就是字節(jié)流數(shù)據(jù)腊满,一般瀏覽器會(huì)進(jìn)行下載
如果 Content-Type 字段的值被瀏覽器判斷為下載類型,那么該請(qǐng)求會(huì)被提交給瀏覽器的下載管理器培己,同時(shí)該 URL 請(qǐng)求的導(dǎo)航流程就此結(jié)束碳蛋。但如果是 HTML,那么瀏覽器則會(huì)繼續(xù)進(jìn)行導(dǎo)航流程省咨。
準(zhǔn)備渲染進(jìn)程
渲染進(jìn)程準(zhǔn)備好后肃弟,瀏覽器進(jìn)程向渲染進(jìn)程發(fā)起“提交文檔(響應(yīng)體)”消息
渲染進(jìn)程和網(wǎng)絡(luò)進(jìn)程建立傳輸管道,并獲取文檔信息零蓉,此時(shí)僅加載數(shù)據(jù)笤受,不進(jìn)行渲染
等文檔數(shù)據(jù)傳輸完成之后,渲染進(jìn)程會(huì)返回“確認(rèn)提交”的消息給瀏覽器進(jìn)程敌蜂,此時(shí)渲染進(jìn)程并未被阻斷 箩兽。
-
瀏覽器進(jìn)程收到消息,更新瀏覽器界面狀態(tài)章喉,包括了安全狀態(tài)汗贫、地址欄的 URL、前進(jìn)后退的歷史狀態(tài)秸脱,并更新 Web 頁面落包。
一旦文檔被提交,渲染進(jìn)程便開始頁面解析和子資源加載摊唇。
頁面生成完成咐蝇,渲染進(jìn)程會(huì)發(fā)送一個(gè)消息給瀏覽器進(jìn)程,瀏覽器接收到消息后遏片,會(huì)停止標(biāo)簽圖標(biāo)上的加載動(dòng)畫嘹害。