瀏覽器工作原理解析

不學(xué)無術(shù),在任何時(shí)候,對任何人,都無所幫助,也不會(huì)帶來利益静尼“追郏——馬克思

瀏覽器架構(gòu)

事實(shí)上開發(fā)一個(gè)瀏覽器可以是單進(jìn)程多線程應(yīng)用,也可以是通過IPC進(jìn)行通信的多進(jìn)程應(yīng)用鼠渺。

一般來說一個(gè)好的應(yīng)用程序往往被分割為多個(gè)相互獨(dú)立的模塊進(jìn)程鸭巴,每個(gè)進(jìn)程都有自己的核心職責(zé)。這些進(jìn)程相互配合完成瀏覽器的整體功能拦盹。而每個(gè)進(jìn)程又可以包含多個(gè)線程鹃祖,一個(gè)進(jìn)程中的多個(gè)線程相互協(xié)同工作完成所在進(jìn)程的職責(zé)。

不同瀏覽器采用了不同的架構(gòu)模式普舆,這里并不存在標(biāo)準(zhǔn)恬口。

補(bǔ)充說明進(jìn)程和線程的區(qū)別如下圖

下邊我們以chrome瀏覽器為例來看看它的架構(gòu)

?○ Browser Process 核心職責(zé):

1:負(fù)責(zé)地址欄、書簽欄沼侣、前進(jìn)后退按鈕等部分工作祖能。

2:負(fù)責(zé)瀏覽器不可見的一些底層操作,如網(wǎng)絡(luò)請求蛾洛、文件訪問等养铸。

?○ Render Process 核心職責(zé):

負(fù)責(zé)網(wǎng)頁呈現(xiàn)渲染

?○ Plugin Process 核心職責(zé):

負(fù)責(zé)一個(gè)網(wǎng)頁所用到的所有插件,如flash等轧膘。

?○ GPU Process 核心職責(zé):

負(fù)責(zé)GPU(Graphics Processing Unit)相關(guān)任務(wù)钞螟,即圖像處理計(jì)算相關(guān)任務(wù)。

Chrome還為我們提供了任務(wù)管理器谎碍,方便我們查看當(dāng)前瀏覽器中運(yùn)行的所有進(jìn)程以及每個(gè)進(jìn)程占用的系統(tǒng)資源等更多信息鳞滨。

Chrome瀏覽器多進(jìn)程架構(gòu)的優(yōu)缺點(diǎn)

優(yōu)點(diǎn):

1:某一渲染進(jìn)程出現(xiàn)問題不會(huì)影響其他進(jìn)程。

2:在系統(tǒng)層面限定了不同的進(jìn)程權(quán)限蟆淀,更為安全拯啦。

缺點(diǎn):

1:不同進(jìn)程的內(nèi)存是不能共享的,這就意味著不同進(jìn)程包含相同的內(nèi)容扳碍。

2:為了節(jié)省內(nèi)存提岔,chrome限定了最大進(jìn)程數(shù),當(dāng)達(dá)到這一極限時(shí)笋敞,新開的Tab會(huì)共享之前打開的同一站點(diǎn)的渲染進(jìn)程碱蒙。(最大進(jìn)程數(shù)由設(shè)備的內(nèi)存和CPU決定)

Site Isolation

Site Isolation 被大家看做是里程碑式的功能,其成功的實(shí)現(xiàn)是多年工程努力的結(jié)果。

那么到底什么是Site Isolation呢赛惩?

從上邊的Chrome多進(jìn)程架構(gòu)圖中我們可以看到某些進(jìn)程中還出現(xiàn)了SubFrame哀墓,這就是Site Isolation機(jī)制作用的結(jié)果。

Site Isolation 機(jī)制從Chrome 67開始默認(rèn)啟用喷兼。這種機(jī)制允許在同一個(gè)Tab下的跨站iframe使用單獨(dú)的進(jìn)程來渲染篮绰,這樣會(huì)更為安全。

Site Isolation并不是簡單的進(jìn)程疊加季惯,而是在底層改變了iframe的通信方法吠各,Chrome的其他功能也要做對應(yīng)的調(diào)整,比如devtool需要響應(yīng)的支持勉抓。

更多Site Isolation參考這篇文章

輸入U(xiǎn)RL后瀏覽器都干了些什么贾漏?

前言:

如上邊說的,我們都知道chrome是多進(jìn)程的藕筋,不同的進(jìn)程有不同的核心職責(zé)纵散。

Browser Process掌管著Tab外的工作,如任務(wù)欄隐圾、書簽欄等

那么很明顯我們在瀏覽器任務(wù)欄中輸入了URL后伍掀,立馬工作的就是Browser Process。

Browser Process 又對這些工作進(jìn)行一一拆解暇藏,交給不同的線程去處理蜜笤。

Browser Process下的線程:

1:UI Thread? 控制瀏覽器上的按鈕和輸入框

2:Network Thread? 處理網(wǎng)絡(luò)請求

3:Storage Thread? 控制文件等的訪問

輸入U(xiǎn)RL后Chrome瀏覽器具體干了些什么?

1:輸入處理

UI Thread 處理輸入叨咖,判斷用戶輸入的URL還是query瘩例,通知Network Thread獲取網(wǎng)頁內(nèi)容。

2:開始導(dǎo)航

Network Thread 負(fù)責(zé)網(wǎng)絡(luò)請求網(wǎng)頁內(nèi)容甸各,并控制 tab 上的 spinner 展現(xiàn)垛贤,表示正在加載中。執(zhí)行 DNS 查詢趣倾,隨后為請求建立 TLS 連接聘惦。如果 Network Thread 接收到了重定向請求頭如 301,Network Thread 會(huì)通知 UI Thread?服務(wù)器要求重定向儒恋。之后善绎,另外一個(gè) URL 請求會(huì)被觸發(fā)。

3:讀取響應(yīng)

Network Thread?會(huì)依據(jù) Content-Type 及 MIME Type sniffing 判斷響應(yīng)內(nèi)容的格式诫尽。如果響應(yīng)內(nèi)容的格式是 HTML ,下一步將會(huì)把這些數(shù)據(jù)傳遞給 Renderer Process牧嫉,如果是 zip 文件或者其它文件剂跟,會(huì)把相關(guān)數(shù)據(jù)傳輸給下載管理器减途。

Safe Browsing 檢查也會(huì)在此時(shí)觸發(fā)曹洽,如果域名或者請求內(nèi)容匹配到已知的惡意站點(diǎn)鳍置,Network Thread 會(huì)展示一個(gè)警告頁税产。此外 CORB 檢測也會(huì)觸發(fā)確保敏感數(shù)據(jù)不會(huì)被傳遞給渲染進(jìn)程。

4:查找渲染進(jìn)程

當(dāng)上述所有檢查完成梧兼,Network Thread 確信瀏覽器可以導(dǎo)航到請求網(wǎng)頁,Network Thread 會(huì)通知 UI Thread 數(shù)據(jù)已經(jīng)準(zhǔn)備好智听,UI Thread 會(huì)查找到一個(gè) Renderer Process 進(jìn)行網(wǎng)頁的渲染到推。為什么會(huì)是查找一個(gè)Render Process,這個(gè)涉及到一個(gè)加速方案惕澎,當(dāng)UI Thread通知Network Thread進(jìn)行網(wǎng)絡(luò)請求的時(shí)候莉测,UI Thread事實(shí)上清楚將要導(dǎo)航到哪個(gè)站點(diǎn),所以UI Thread會(huì)在此時(shí)并行預(yù)先加載一個(gè)渲染進(jìn)程唧喉,等到Network Thread請求到數(shù)據(jù)時(shí)捣卤,渲染進(jìn)程就已經(jīng)準(zhǔn)備好了。但是如果是重定向八孝,那么之前預(yù)先準(zhǔn)備的渲染進(jìn)程將不可用董朝,就要重新再啟一個(gè)渲染進(jìn)程。

5:確認(rèn)導(dǎo)航

上述過程后干跛,數(shù)據(jù)以及渲染進(jìn)程都是可用了子姜,Browser Process會(huì)給Render Process發(fā)送IPC消息來確認(rèn)導(dǎo)航,一旦Browser Process收到Render Process的渲染確認(rèn)信息楼入,導(dǎo)航過程就結(jié)束了哥捕,頁面加載過程開始。 此時(shí)嘉熊,地址欄會(huì)更新遥赚,展示出新頁面的網(wǎng)頁信息。history tab會(huì)更新阐肤,可通過返回鍵返回導(dǎo)航來的頁面凫佛,為了讓關(guān)閉tab窗口后便于恢復(fù),這些信息會(huì)保存在硬盤中。

未完待續(xù)...

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末御蒲,一起剝皮案震驚了整個(gè)濱河市衣赶,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌厚满,老刑警劉巖府瞄,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異碘箍,居然都是意外死亡遵馆,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進(jìn)店門丰榴,熙熙樓的掌柜王于貴愁眉苦臉地迎上來货邓,“玉大人,你說我怎么就攤上這事四濒』豢觯” “怎么了?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵盗蟆,是天一觀的道長戈二。 經(jīng)常有香客問我,道長喳资,這世上最難降的妖魔是什么觉吭? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮仆邓,結(jié)果婚禮上鲜滩,老公的妹妹穿的比我還像新娘。我一直安慰自己节值,他們只是感情好徙硅,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著察署,像睡著了一般闷游。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上贴汪,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天脐往,我揣著相機(jī)與錄音,去河邊找鬼扳埂。 笑死业簿,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的阳懂。 我是一名探鬼主播梅尤,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼柜思,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了巷燥?” 一聲冷哼從身側(cè)響起赡盘,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎缰揪,沒想到半個(gè)月后陨享,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡钝腺,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年抛姑,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片艳狐。...
    茶點(diǎn)故事閱讀 38,117評論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡定硝,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出毫目,到底是詐尸還是另有隱情蔬啡,我是刑警寧澤,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布蒜茴,位于F島的核電站星爪,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏粉私。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一近零、第九天 我趴在偏房一處隱蔽的房頂上張望诺核。 院中可真熱鬧,春花似錦久信、人聲如沸窖杀。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽入客。三九已至,卻和暖如春腿椎,著一層夾襖步出監(jiān)牢的瞬間桌硫,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工啃炸, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留铆隘,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓南用,卻偏偏與公主長得像膀钠,于是被迫代替她去往敵國和親掏湾。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,877評論 2 345