国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

一個(gè)頁面從輸入U(xiǎn)RL到加載顯示完成,發(fā)生了什么?

NervosNetwork / 865人閱讀

摘要:詢問權(quán)威的服務(wù)器域名服務(wù)器會繼續(xù)檢查請求的下一部分,并將查詢指向負(fù)責(zé)此特定域名的服務(wù)器這些權(quán)威的服務(wù)器將負(fù)責(zé)了解關(guān)于特定域的所有信息,并將信息存儲在記錄。

面試經(jīng)典題——URL加載 一、涉及基本知識點(diǎn):

1. 計(jì)算機(jī)網(wǎng)絡(luò)

五層因特爾協(xié)議棧:

應(yīng)用層(dns、http):DNS解析成IP并完成http請求發(fā)送;

傳輸層(tcp、udp):三次握手四次揮手模式建立tcp連接;

網(wǎng)絡(luò)層(IP、ARP):IP尋址;

數(shù)據(jù)鏈路層(PPP):將請求數(shù)據(jù)封裝成幀;

物理層:利用物理介質(zhì)傳輸比特流(傳輸?shù)臅r(shí)候通過雙絞線、電磁波等)

OIS七層框架:多了兩層即,會話層(處理兩個(gè)通信系統(tǒng)中交換信息的表示方式)和表示層(管理不同用戶和進(jìn)程之間的對話)。

get和post的區(qū)別

get產(chǎn)生一個(gè)tcp數(shù)據(jù)包,post產(chǎn)生兩個(gè)

get請求時(shí)會把headers和data數(shù)據(jù)一起發(fā)送出去;

post請求時(shí),瀏覽器先發(fā)送headers,服務(wù)器100繼續(xù),瀏覽器再發(fā)送data。

DNS查詢得到IP

請求信息:首先查看域名的本地DNS緩存,該緩存存儲計(jì)算機(jī)最近檢索到的信息,如果計(jì)算機(jī)不知道答案,那么就需要執(zhí)行一個(gè)DNS查詢來查找答案;

詢問遞歸式DNS服務(wù)器:

如果信息不存儲在本地,計(jì)算機(jī)會聯(lián)系您的ISP(網(wǎng)絡(luò)提供商)的遞歸DNS服務(wù)器;

這些專用計(jì)算機(jī)會為你執(zhí)行一個(gè)DNS查詢工作;

遞歸服務(wù)器有自己的緩存,所以這個(gè)查詢過程通常在這里完成,并將信息還回給用戶;

詢問根域名服務(wù)器

如果遞歸服務(wù)器沒有答案,他們會查詢根域名服務(wù)器;

根域名服務(wù)器是一種計(jì)算機(jī),它扮演著一種DNS的電話接線員的角色,他們不知道答案,但可以將我們的疑問指向知道在哪里可以找到答案的人。

詢問TLD域名服務(wù)器:

根域名服務(wù)器將查看請求的第一部分,按從右到左的順序,從www.dyn.com中找到.com,并將請求指向.com對應(yīng)的頂級域名服務(wù)器(TLD).com;

每個(gè)TLD,如(.com,.org,.us)都有自己的頂級域名服務(wù)器,

這些服務(wù)器沒有我們需要的信息,但他們可以直接將我們引導(dǎo)到有信息的服務(wù)器。

詢問權(quán)威的DNS服務(wù)器

TLD域名服務(wù)器會繼續(xù)檢查請求的下一部分(dyn)www.dyn.com,并將查詢指向負(fù)責(zé)此特定域名的服務(wù)器;

這些權(quán)威的服務(wù)器將負(fù)責(zé)了解關(guān)于特定域的所有信息,并將信息存儲在DNS記錄。

找回記錄:
-遞歸服務(wù)器從權(quán)威服務(wù)器中檢索dyn.com的記錄,并將記錄存儲在本地緩存;

如果其他任何人請求dyn.com的主機(jī)記錄,遞歸服務(wù)器已經(jīng)有答案了,并不需要再次進(jìn)行查找;

所有記錄都有一個(gè)期限,一段時(shí)間后,遞歸服務(wù)器將需要要求一個(gè)新的記錄副本,以確保信息不回過時(shí)。

接收答案:

有了答案,遞歸服務(wù)器將記錄返回到計(jì)算機(jī),

您的計(jì)算機(jī)將記錄存儲在緩存中,從記錄中讀取IP地址,然后將這些信息傳遞給瀏覽器;

然后瀏覽器就可以根據(jù)IP地址和服務(wù)器進(jìn)行連接建立。

TCPIP請求

http的本質(zhì)就是TCPIP請求;

需要經(jīng)歷3次握手建立連接,4次揮手?jǐn)嚅_連接;

TCP將http長報(bào)文劃分為短報(bào)文,通過三次握手與服務(wù)器端建立連接,進(jìn)行可靠傳輸。

三次握手:

客戶端:你是XXX服務(wù)端嗎?

服務(wù)端: 我是XXX服務(wù)端,你是客戶端嗎?

客服端: 是的,我是客戶端

建立連接成功后,接下來就可以進(jìn)行正式的傳輸數(shù)據(jù)。

四次揮手?jǐn)嚅_連接

主動方:我已經(jīng)關(guān)閉了向你那邊的信息發(fā)送通道,只能被動接受信息了;

被動方: 收到通道關(guān)閉的信息;

被動方: 我現(xiàn)在也關(guān)閉了向你那邊發(fā)送信息的通道

主動方: 左后收到信息,連接斷開,之后雙方無法通信

TCP/IP的并發(fā)限制:

瀏覽器對同一個(gè)域名下并發(fā)的TCP連接是有限制的(2-10個(gè)不等)

而且在http1.0中往往一個(gè)資源的下載就需要一個(gè)tcp/ip請求

2. 瀏覽器機(jī)制

(1)進(jìn)程和線程的概念

進(jìn)程是CPU資源分配的最小單位,是能擁有資源和獨(dú)立運(yùn)行的最小單位;

線程是CPU調(diào)度的最小單位,線程是建立在進(jìn)程的基礎(chǔ)上的一次程序運(yùn)行單位,一個(gè)進(jìn)程可以擁有多個(gè)線程;

通俗的講:進(jìn)程是一個(gè)工廠,工廠有它獨(dú)立的資源,工廠之間相互獨(dú)立->進(jìn)程之間相互獨(dú)立,線程是工廠中的工人,多個(gè)工人之間可以協(xié)作完成任務(wù),工廠內(nèi)有一個(gè)或多個(gè)工人,工人之間共享空間。

(2)多進(jìn)程的瀏覽器

瀏覽器是多進(jìn)程的,有一個(gè)主控進(jìn)程,以及每一個(gè)tab頁面都會開一個(gè)進(jìn)程(某些情況下多個(gè)tab由于優(yōu)化策略會合并)

瀏覽器主要進(jìn)程:

Browser進(jìn)程:瀏覽器的主進(jìn)程,負(fù)責(zé)協(xié)調(diào)、主控,只有一個(gè),作用:

負(fù)責(zé)瀏覽器界面的顯示、與用戶交互(如前進(jìn)、后退等)

負(fù)責(zé)各個(gè)頁面的管理,創(chuàng)建和銷毀其他進(jìn)程;

將Renderer進(jìn)程得到的內(nèi)存中的Bitmap繪制到用戶界面上

網(wǎng)絡(luò)資源的管理和下載等

第三方插件進(jìn)程: 每種類型的插件對應(yīng)一個(gè)進(jìn)程,僅當(dāng)該插件使用時(shí)才創(chuàng)建;

GPU進(jìn)程: 最多一個(gè),用于3D繪制等;

瀏覽器渲染進(jìn)程(Renderer進(jìn)程、瀏覽器內(nèi)核、內(nèi)部是多線程)

默認(rèn)沒打開一個(gè)tab頁面,就會啟動一個(gè)Renderer進(jìn)程;

負(fù)責(zé)頁面的渲染,腳本的執(zhí)行,事件的處理。

瀏覽器多進(jìn)程的優(yōu)勢

避免單個(gè)page crash影響整個(gè)瀏覽器;

避免第三方插件crash影響整個(gè)瀏覽器

多進(jìn)程充分利用多核優(yōu)勢;

方便使用沙盒模型隔離插件等進(jìn)程,提高瀏覽器穩(wěn)定性

簡單點(diǎn)理解:如果瀏覽器是單進(jìn)程,那么某個(gè)tab頁或第三方插件崩潰了,就會導(dǎo)致整個(gè)瀏覽器崩潰,體驗(yàn)度極差,不過多進(jìn)程內(nèi)存消耗會更大,有點(diǎn)用空間換時(shí)間。

瀏覽器內(nèi)核(渲染進(jìn)程)

瀏覽器渲染進(jìn)程內(nèi)部是多線程,包含主要線程有:

1.GUI渲染線程:

(1)負(fù)責(zé)瀏覽器界面的渲染,解析HTML、CSS,構(gòu)建DOM樹和RenderObject樹,布局和繪制等;

(2) 當(dāng)界面需要重繪(Repaint)或由于某種操作引發(fā)回流(reflow)時(shí)該線程會執(zhí)行;

注意:GUI渲染線程和JS引擎線程是互斥的,當(dāng)JS引擎執(zhí)行時(shí)GUI線程會被掛起,GUI更新會保存在一個(gè)隊(duì)列中等JS引擎空閑時(shí)立即執(zhí)行。

2.JS引擎線程:

JS內(nèi)核,負(fù)責(zé)處理JavaScript腳本程序(V8引擎)

負(fù)責(zé)解析JavaScript腳本,運(yùn)行代碼;

JS引擎一直等待著任務(wù)隊(duì)列中的任務(wù)到來,然后加以處理,一個(gè)tab頁面(renderer進(jìn)程)中無論什么時(shí)候都只有一個(gè)JS線程在運(yùn)行JS程序;

注意:由于GUI渲染線程和JS引擎線程是互斥的,所以如果JS程序運(yùn)行時(shí)間過長,這樣會導(dǎo)致頁面渲染不連貫,導(dǎo)致頁面渲染加載阻塞;

3.事件觸發(fā)線程:

歸屬于瀏覽器,而不是JS引擎,用來控制事件循環(huán);

當(dāng)JS引擎執(zhí)行代碼塊如setTimeOut時(shí)(也可以來自瀏覽器內(nèi)核的其他線程,如鼠標(biāo)單擊事件、AJAX異步請求等),會將對應(yīng)的任務(wù)添加到事件線程中;

當(dāng)對應(yīng)的事件符合觸發(fā)條件被觸發(fā)時(shí),該線程就會把事件添加到JS的待處理隊(duì)列的隊(duì)尾,等待JS引擎的處理;

注意:由于JS的單線程的關(guān)系所以這些待處理隊(duì)列中的事件都得排隊(duì)等待JS引擎處理(當(dāng)JS引擎空閑時(shí)才會去執(zhí)行)。

4.定時(shí)觸發(fā)器線程:

setTimeOut與setInterval所在的線程;

瀏覽器的定時(shí)計(jì)數(shù)器并不是由JavaScript引擎計(jì)數(shù)的,(因?yàn)镴avaScript是單線程,如果處于阻塞狀態(tài)就會影響計(jì)時(shí)的準(zhǔn)確)因此通過多帶帶的線程來計(jì)時(shí)并觸發(fā)定時(shí)(計(jì)時(shí)完畢后,添加到事件隊(duì)列,等待JS引擎空閑時(shí)執(zhí)行)

5.異步http請求線程:

在XMLHttpRequest在連接后是通過瀏覽器新開一個(gè)線程請求的

將檢測到狀態(tài)變更時(shí),如果設(shè)置有回調(diào)函數(shù),異步線程就將產(chǎn)生狀態(tài)變更事件,將這個(gè)回調(diào)在放到事件隊(duì)列中,再由JavaScript引擎執(zhí)行。

一、 一個(gè)頁面從輸入U(xiǎn)RL到加載顯示完成,這個(gè)過程發(fā)生了什么?

簡潔版:

瀏覽器根據(jù)請求的URL交給DNS域名解析,找到真實(shí)的IP,向服務(wù)器發(fā)起請求;

服務(wù)器交給后臺處理完成后返回?cái)?shù)據(jù),瀏覽器接收文件(HTML、CSS、JavaScript等);

瀏覽器對加載到的資源(HTML、CSS、JavaScript等)進(jìn)行語法解析,構(gòu)建相應(yīng)的內(nèi)部數(shù)據(jù)結(jié)構(gòu)(DOM樹、CSS樹、render樹等);

載入解析到的資源文件、渲染頁面、完成。

詳細(xì)版:

首先瀏覽器開啟一個(gè)線程來處理這個(gè)請求,對URL分析判斷,如果是http協(xié)議就按照Web方式來處理;

其次瀏覽器會對URL進(jìn)行解析,一般包括(協(xié)議頭、主機(jī)域名或IP地址、端口號、請求路徑、查詢參數(shù)、hash等),然后開啟網(wǎng)絡(luò)線程發(fā)出一個(gè)完整到http請求;

當(dāng)然一般我們輸入的URL是服務(wù)器域名,這時(shí)就需要DNS通過域名查詢得到對應(yīng)的IP;

DNS首先會查看瀏覽器DNS緩存,沒有就查詢計(jì)算機(jī)本地DNS緩存,還沒有就詢問遞歸式DNS服務(wù)器(即網(wǎng)絡(luò)提供商,一般這個(gè)服務(wù)器都會有自己的緩存,所以IP查詢一般在這里完成),如果沒有緩存,那就需要通過根域名和TLD域名服務(wù)器指到對應(yīng)的權(quán)威DNS服務(wù)器找回記錄,并緩存到遞歸式服務(wù)器,然后遞歸服務(wù)器在將記錄返回給本地。

有了IP地址,此時(shí)網(wǎng)絡(luò)層便會通過IP地址尋的對應(yīng)服務(wù)器的物理地址

尋得服務(wù)器地址,客戶端在網(wǎng)絡(luò)傳輸層便可以和服務(wù)器通過三次握手建立tcpip連接

連接建立后網(wǎng)絡(luò)數(shù)據(jù)鏈路層將數(shù)據(jù)包裝成幀;

最后物理層利用物理介質(zhì)進(jìn)行傳輸;

到了服務(wù)器,就會通過相反的方式將數(shù)據(jù)一層一層的還原回去;

請求到了后臺服務(wù)器,一般會有統(tǒng)一的驗(yàn)證,如安全驗(yàn)證、跨域驗(yàn)證等,驗(yàn)證未通過就直接返回相應(yīng)的http報(bào)文

驗(yàn)證通過后,就會進(jìn)入后臺代碼,此時(shí)程序收到請求,然后執(zhí)行對應(yīng)的操作(如查詢數(shù)據(jù)庫等);

如果瀏覽器訪問過,且緩存上有對應(yīng)的資源,便會與服務(wù)器最后修改時(shí)間對比,一致便返回304,告訴瀏覽器可使用本地緩存;

前端瀏覽器接收到響應(yīng)成功的報(bào)文后便開始下載網(wǎng)頁

下載完的網(wǎng)頁將被交給瀏覽器內(nèi)核(渲染進(jìn)程)進(jìn)行處理:

根據(jù)頂部定義的DTD類型進(jìn)行對應(yīng)的解析方式;

渲染進(jìn)程內(nèi)部是多線程的,網(wǎng)頁的解析將會被交給內(nèi)部的GUI渲染線程處理;

首先渲染線程中的HTML解釋器,將HTML網(wǎng)頁和資源從字節(jié)流解釋轉(zhuǎn)換成字符流;

再通過詞法分析器將字符流解釋成詞語;

之后經(jīng)過語法分析器根據(jù)詞語構(gòu)建成節(jié)點(diǎn);最后通過這些節(jié)點(diǎn)組建一個(gè)DOM樹;

這個(gè)過程中,如果遇到的DOM節(jié)點(diǎn)是JavaScript代碼,就會調(diào)用JavaScript引擎對JavaScript代碼進(jìn)行解釋執(zhí)行,此時(shí)由JavaScript引擎和GUI渲染線程的互斥,GUI渲染線程就會被掛起,渲染過程停止;如果JavaScript代碼的運(yùn)行中對DOM樹進(jìn)行了修改,那么DOM的構(gòu)建需要從新開始;

如果節(jié)點(diǎn)需要依賴其他資源,如(圖片,CSS等),便會調(diào)用網(wǎng)絡(luò)模塊的資源加載器來加載它們,但它們是異步的,不會阻塞當(dāng)前DOM樹的構(gòu)建;

如果遇到的是JavaScript資源URL(沒有標(biāo)記異步),則需要停止當(dāng)前DOM的構(gòu)建,直到JavaScript的資源加載并被JavaScript引擎執(zhí)行后才繼續(xù)構(gòu)建DOM;

對于CSS,CSS解釋器會將CSS文件解釋成內(nèi)部表示結(jié)構(gòu),生成CSS規(guī)則樹;

然后合并CSS規(guī)則樹和DOM樹,生成render渲染樹;

最后對render樹進(jìn)行布局和繪制,并將結(jié)果通過IO線程傳遞給Browser控制進(jìn)程進(jìn)行顯示。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/94997.html

相關(guān)文章

  • 一個(gè)頁面輸入URL加載顯示完成發(fā)生什么

    摘要:詢問權(quán)威的服務(wù)器域名服務(wù)器會繼續(xù)檢查請求的下一部分,并將查詢指向負(fù)責(zé)此特定域名的服務(wù)器這些權(quán)威的服務(wù)器將負(fù)責(zé)了解關(guān)于特定域的所有信息,并將信息存儲在記錄。 面試經(jīng)典題——URL加載 一、涉及基本知識點(diǎn): 1. 計(jì)算機(jī)網(wǎng)絡(luò) 五層因特爾協(xié)議棧: 應(yīng)用層(dns、http):DNS解析成IP并完成http請求發(fā)送; 傳輸層(tcp、udp):三次握手四次揮手模式建立tcp連接; 網(wǎng)絡(luò)層...

    nanchen2251 評論0 收藏0
  • 一個(gè)頁面輸入URL加載顯示完成發(fā)生什么

    摘要:詢問權(quán)威的服務(wù)器域名服務(wù)器會繼續(xù)檢查請求的下一部分,并將查詢指向負(fù)責(zé)此特定域名的服務(wù)器這些權(quán)威的服務(wù)器將負(fù)責(zé)了解關(guān)于特定域的所有信息,并將信息存儲在記錄。 面試經(jīng)典題——URL加載 一、涉及基本知識點(diǎn): 1. 計(jì)算機(jī)網(wǎng)絡(luò) 五層因特爾協(xié)議棧: 應(yīng)用層(dns、http):DNS解析成IP并完成http請求發(fā)送; 傳輸層(tcp、udp):三次握手四次揮手模式建立tcp連接; 網(wǎng)絡(luò)層...

    LuDongWei 評論0 收藏0
  • 轉(zhuǎn):輸入url顯示網(wǎng)頁發(fā)生什么

    摘要:在瀏覽器中輸入到顯示網(wǎng)頁主要包含兩個(gè)部分網(wǎng)絡(luò)通信和頁面渲染互聯(lián)網(wǎng)內(nèi)各網(wǎng)絡(luò)設(shè)備間的通信都遵循協(xié)議,利用協(xié)議族進(jìn)行網(wǎng)絡(luò)通信時(shí),會通過分層順序與對方進(jìn)行通信。狀態(tài)碼主要包括以下部分指示信息表示請求已接收,繼續(xù)處理。在瀏覽器中輸入url到顯示網(wǎng)頁主要包含兩個(gè)部分: 網(wǎng)絡(luò)通信和頁面渲染 互聯(lián)網(wǎng)內(nèi)各網(wǎng)絡(luò)設(shè)備間的通信都遵循TCP/IP協(xié)議,利用TCP/IP協(xié)議族進(jìn)行網(wǎng)絡(luò)通信時(shí),會通過分層順序與對方進(jìn)行通信...

    Chiclaim 評論0 收藏0
  • 輸入 url 頁面展現(xiàn)的短短幾秒內(nèi)瀏覽器究竟做什么

    摘要:在上述過程再細(xì)化為瀏覽器搜索自己的緩存。至此,瀏覽器已經(jīng)得到了域名對應(yīng)的地址。具體過程如下在中這一過程如下首先是字節(jié)流,經(jīng)過解碼之后是字符流,然后通過詞法分析器會被解釋成詞語,之后經(jīng)過語法分析器構(gòu)建成節(jié)點(diǎn),最后這些節(jié)點(diǎn)被組建成一棵樹。 面試的時(shí)候,我們經(jīng)常會被問從在瀏覽器地址欄中輸入 url 到頁面展現(xiàn)的短短幾秒內(nèi)瀏覽器究竟做了什么?那么瀏覽器到底做了啥? 瀏覽器的多進(jìn)程架構(gòu)一個(gè)好的程...

    dackel 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<