常見(jiàn)面試題:地址欄輸入url按回車發(fā)生了什么拜效?(越詳細(xì)越好)

很熟悉的標(biāo)題,總結(jié)一下自己的理解各谚,歡迎各位同行賜教=艉丁:)

總結(jié)依據(jù)webkit技術(shù)內(nèi)幕http權(quán)威指南兩書(shū)

一:輸入url,url的組成,有什么用?

通常最簡(jiǎn)單的url昌渤,就像這樣:http://www.reibang.com/赴穗,這串url就包含方案(就是通信協(xié)議,常見(jiàn)的http,https)膀息,服務(wù)器地址(www.reibang.com)望抽,端口號(hào)(http協(xié)議默認(rèn)是80端口,https協(xié)議默認(rèn)是443端口履婉,https就是加密的http協(xié)議煤篙,就是在http和TCP之間加了一層TSL或者SSL的安全層),資源(默認(rèn)是index.html)毁腿。

二:通過(guò)url解析出ip地址(到了我們常說(shuō)的DNS域名解析了)

1.我們來(lái)看第一次訪問(wèn)某個(gè)站點(diǎn)的時(shí)候要做什么辑奈?

如上所訴苛茂,url解析出了服務(wù)器域名,現(xiàn)在要將域名解析出ip地址鸠窗,就要請(qǐng)求域名服務(wù)器來(lái)解析ip妓羊,比如www.reibang.com.這個(gè)域名,后面多了一個(gè)點(diǎn)稍计,這個(gè)點(diǎn)就表示公網(wǎng)躁绸,通常是省略的,域名解析就是從右向左開(kāi)始解析臣嚣,解析.域->com域->jianshu.com域->www.reibang.com域這樣就拿到ip地址(其中的查找過(guò)程也是很復(fù)雜的净刮,這里我們只概括),如下解析過(guò)程:

用戶發(fā)起請(qǐng)求->操作系統(tǒng)把域名發(fā)送給本地區(qū)的域名服務(wù)器->有就解析返回ip硅则,然后結(jié)束淹父;

用戶發(fā)起請(qǐng)求->操作系統(tǒng)把域名發(fā)送給本地區(qū)的域名服務(wù)器->沒(méi)有->到Root Server的域名服務(wù)器請(qǐng)求解析->返回一個(gè)主域名(.com)的服務(wù)器地址地址->本地的域名服務(wù)器再向主域名服務(wù)器發(fā)起請(qǐng)求->返回Name Server域名服務(wù)器地址(jianshu.com)->接下來(lái)的解析就由域名提供商的服務(wù)器來(lái)解析->Name Server域名服務(wù)器查詢存儲(chǔ)的域名和ip的映射關(guān)系表->返回ip地址和一個(gè)過(guò)期時(shí)間,根據(jù)這個(gè)時(shí)間緩存到本地怎虫,解析結(jié)束暑认。

2.第二次再訪問(wèn)同樣站點(diǎn)的時(shí)候要做什么?

通常第一次訪問(wèn)完成之后大审,瀏覽器會(huì)將域名解析的映射緩存到本地蘸际,下次再訪問(wèn)該站點(diǎn)的時(shí)候,會(huì)先從瀏覽器的緩存中查看有沒(méi)有這個(gè)域名被解析過(guò)得ip地址徒扶,有沒(méi)有過(guò)期等捡鱼,如果有這個(gè)ip而且沒(méi)有過(guò)期,解析過(guò)程就結(jié)束酷愧。如果瀏覽器的緩存中沒(méi)有,瀏覽器就會(huì)查找操作系統(tǒng)的緩存中是否有對(duì)應(yīng)域名的ip地址(操作系統(tǒng)的域名解析也有一個(gè)過(guò)程的缠诅,大家可以自行搜索)溶浴。


瀏覽器的dns緩存目錄


三:ip地址解析完成之后,就開(kāi)始發(fā)請(qǐng)求

前面通過(guò)url解析出方案管引,端口號(hào)士败,域名服務(wù)器解析出ip地址,此時(shí)瀏覽器發(fā)起到122.228.25.221端口80的TCP連接褥伴,在建立連接之前瀏覽器和服務(wù)器會(huì)進(jìn)行三次握手

第一次:瀏覽器向服務(wù)器發(fā)送請(qǐng)求(SYN=1),等待服務(wù)器確認(rèn)谅将;

第二次:服務(wù)器收到請(qǐng)求并確認(rèn),回復(fù)一個(gè)指令(SYN=1重慢,ACK=1)饥臂;

第三次:客戶端收到服務(wù)器的回復(fù)指令,并返回確認(rèn)(ACK=1)似踱;

1.首先瀏覽器發(fā)送連接請(qǐng)求報(bào)文隅熙,2.服務(wù)器接受連接后回復(fù)ACK報(bào)文稽煤,并為這次連接分配資源。3.瀏覽器接收到ACK報(bào)文后也向服務(wù)器發(fā)生ACK報(bào)文囚戚,并分配資源酵熙,這樣TCP連接就建立了,開(kāi)始數(shù)據(jù)傳輸驰坊。瀏覽器向服務(wù)器發(fā)送http的請(qǐng)求報(bào)文匾二,瀏覽器從服務(wù)器讀取響應(yīng)報(bào)文,然后瀏覽器關(guān)閉連接拳芙。

綜合前兩個(gè)的過(guò)程大致如下圖:


從域名解析到發(fā)起請(qǐng)求的大致過(guò)程


四:服務(wù)器返回html文檔之后察藐,瀏覽器的渲染引擎開(kāi)始dom解析過(guò)程(構(gòu)建DOM樹(shù)->渲染樹(shù)(Render tree)->布局render樹(shù)->繪制render樹(shù))

1.通過(guò)網(wǎng)絡(luò)請(qǐng)求拿到html文檔之后,渲染引擎會(huì)調(diào)用html解析器開(kāi)始解析html态鳖,將html的標(biāo)簽解析成dom樹(shù)转培,如果遇到靜態(tài)資源,link標(biāo)簽則去請(qǐng)求相應(yīng)的資源浆竭,遇到script標(biāo)簽就會(huì)調(diào)用js引擎解釋并執(zhí)行(全局執(zhí)行js代碼的時(shí)候浸须,dom樹(shù)是禁止被訪問(wèn)的,因?yàn)閖s也可以操作dom結(jié)構(gòu)邦泄,此時(shí)dom樹(shù)并沒(méi)有創(chuàng)建完成删窒,所以js我們大都建議放在body元素之后(因?yàn)橛行﹋s執(zhí)行期間可能會(huì)很耗時(shí)),這樣就不會(huì)阻止其他資源的下載)顺囊。

解析dom樹(shù)的過(guò)程:通過(guò)網(wǎng)絡(luò)請(qǐng)求獲取的html網(wǎng)頁(yè)或資源從字節(jié)流解碼成字符流肌索,然后通過(guò)詞法分析器解析成詞語(yǔ),之后經(jīng)過(guò)語(yǔ)法分析器構(gòu)建成節(jié)點(diǎn)特碳,最后這些節(jié)點(diǎn)組成一顆dom樹(shù)诚亚;(當(dāng)dom樹(shù)構(gòu)建完成之后,webkit會(huì)觸發(fā)DOMContentLoaded事件午乓,jquery的dom ready源碼實(shí)現(xiàn)也用到這個(gè)事件站宗,當(dāng)所有資源全都加載完畢之后會(huì)觸發(fā)onload事件


從資源的字節(jié)流到dom樹(shù)

2.dom樹(shù)解析完成之后,渲染引擎調(diào)用css解釋器根據(jù)css規(guī)則為每個(gè)dom樹(shù)節(jié)點(diǎn)計(jì)算css樣式信息益愈,構(gòu)建渲染樹(shù)(Render tree)梢灭;

render tree的過(guò)程:渲染引擎調(diào)用css解釋器,根據(jù)css規(guī)則(解析外部或者內(nèi)部引用額樣式表)蒸其,解析出樣式信息敏释,構(gòu)建render tree,渲染樹(shù)會(huì)忽略掉不需要被渲染的元素(display:none,head,meta...)摸袁;

3.布局樹(shù)(render layer)

構(gòu)建render tree之后钥顽,每個(gè)元素并不知道自己的大小顏色等樣式和位置信息,渲染引擎根據(jù)包含塊和盒模型來(lái)計(jì)算元素的大小位置等信息靠汁,這就是布局計(jì)算(排版)耳鸯。布局計(jì)算是一個(gè)遞歸過(guò)程:一個(gè)節(jié)點(diǎn)的大小要根據(jù)子節(jié)點(diǎn)的位置大小來(lái)計(jì)算湿蛔,一旦布局發(fā)生變化,就要重新繪制县爬,渲染效率就會(huì)降低阳啥,通常網(wǎng)頁(yè)性能瓶頸大都是頻繁的dom操作造成的,現(xiàn)在react框架的diff算法财喳,建立虛擬dom對(duì)比上一次的dom察迟,只繪制發(fā)生改變的那部分,大大提升性能耳高。

4.繪制render樹(shù)

渲染引擎開(kāi)始繪制圖像(繪制這部分很復(fù)雜扎瓶,不說(shuō)了,你猜我知道不知道C谇埂)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末概荷,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子碌燕,更是在濱河造成了極大的恐慌误证,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,110評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件修壕,死亡現(xiàn)場(chǎng)離奇詭異愈捅,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)慈鸠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,443評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門蓝谨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人青团,你說(shuō)我怎么就攤上這事譬巫。” “怎么了督笆?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,474評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵芦昔,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我胖腾,道長(zhǎng),這世上最難降的妖魔是什么瘪松? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,881評(píng)論 1 295
  • 正文 為了忘掉前任咸作,我火速辦了婚禮,結(jié)果婚禮上宵睦,老公的妹妹穿的比我還像新娘记罚。我一直安慰自己,他們只是感情好壳嚎,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,902評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布桐智。 她就那樣靜靜地躺著末早,像睡著了一般。 火紅的嫁衣襯著肌膚如雪说庭。 梳的紋絲不亂的頭發(fā)上然磷,一...
    開(kāi)封第一講書(shū)人閱讀 51,698評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音刊驴,去河邊找鬼姿搜。 笑死,一個(gè)胖子當(dāng)著我的面吹牛捆憎,可吹牛的內(nèi)容都是我干的舅柜。 我是一名探鬼主播,決...
    沈念sama閱讀 40,418評(píng)論 3 419
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼躲惰,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼致份!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起础拨,我...
    開(kāi)封第一講書(shū)人閱讀 39,332評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤氮块,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后太伊,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體雇锡,經(jīng)...
    沈念sama閱讀 45,796評(píng)論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,968評(píng)論 3 337
  • 正文 我和宋清朗相戀三年僚焦,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了锰提。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,110評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡芳悲,死狀恐怖立肘,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情名扛,我是刑警寧澤谅年,帶...
    沈念sama閱讀 35,792評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站肮韧,受9級(jí)特大地震影響融蹂,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜弄企,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,455評(píng)論 3 331
  • 文/蒙蒙 一超燃、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧拘领,春花似錦意乓、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,003評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)笆凌。三九已至,卻和暖如春士葫,著一層夾襖步出監(jiān)牢的瞬間乞而,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,130評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工为障, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留晦闰,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,348評(píng)論 3 373
  • 正文 我出身青樓鳍怨,卻偏偏與公主長(zhǎng)得像呻右,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子鞋喇,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,047評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容