瀏覽器發(fā)展史

單進程瀏覽器

單進程瀏覽器是指瀏覽器所以模塊都運行再同一個進程里,這些模塊包含了網(wǎng)絡、插件采缚、JavaScript 運行環(huán)境、渲染引擎和頁面等挠他。

2007年之前扳抽,所有的瀏覽器都是單進程的,e.g. IE6殖侵。IE6時代贸呢,瀏覽器是單進程的,所有頁面也都是運行在一個主線程中的拢军,當時IE6就是這樣設(shè)計楞陷,而且此時的IE6是單標簽,也就是說一個頁面一個窗口茉唉。頁面的所有的功能模塊都運行在同一個進程里固蛾,這個模塊包括但不限于:網(wǎng)絡、渲染引擎度陆、JavaScript運行環(huán)境艾凯、第三方插件等。

單進程的瀏覽器存在的問題

  1. 不穩(wěn)定:早期的瀏覽器都是通過插件來實現(xiàn)視頻懂傀、游戲等功能趾诗,插件、渲染引擎等都運行在瀏覽器進程之中鸿竖,一個意外崩潰就會導致整個瀏覽器的奔潰沧竟。
  2. 不流暢:因為所有頁面的功能模塊都運行在同一個線程之中,因此同一時刻只有一個模塊可以執(zhí)行缚忧,這就很有可能出現(xiàn)一個模塊發(fā)生阻塞的時候而導致其他模塊無法運行的情況悟泵。
  3. 不安全:不安全主要是處于兩個方面的,一個是插件一個是頁面腳本闪水。頁面中運行的插件可以讀取電腦的資源糕非,執(zhí)行一些命令。而頁面腳本則可以通過瀏覽器漏洞來獲取系統(tǒng)權(quán)限球榆,從而應發(fā)一系列安全問題朽肥。

多進程瀏覽器

背景:國產(chǎn)瀏覽器都采用多標簽的形式,其中的一個標簽頁面的卡頓都會影響到整個瀏覽器持钉。
因為卡頓衡招,國內(nèi)瀏覽器就開始嘗試支持頁面多線程,也就是讓部分頁面運行在單獨的線程之中每强,意味著每個線程擁有單獨的JavaScript執(zhí)行環(huán)境始腾,和Cookie環(huán)境。
問題就來了:比如A站點頁面登陸一個網(wǎng)站空执,保存了一些Cookie數(shù)據(jù)到磁盤上浪箭,再在當前線程環(huán)境中保存部分Session數(shù)據(jù),由于Session是不需要保存到硬盤上的辨绊,所以Session只會保存在當前的線程環(huán)境中奶栖。這時候再打開另外一個A站點的頁面,假設(shè)這個頁面在另外一個線程中里面门坷,那么它首先讀取硬盤上的Cookie信息宣鄙,但是,由于Session信息是保存在另外一個線程里面的拜鹤,無法直接讀取框冀,這樣就要實現(xiàn)一個Session同步的問題。
后來敏簿,Session問題解決了明也,但是假死的問題依然有,因為進程內(nèi)使用了一個窗口惯裕,這個窗口是依附到瀏覽器主窗口之上的温数,所以他們公用一套消息循環(huán)機制,如果一個窗口卡死了蜻势,整個瀏覽器也會卡死撑刺。
國產(chǎn)瀏覽器又出了一招,就是把頁面做成一個單獨的彈窗握玛,如果這個頁面卡死了够傍,就把這個彈窗給隱藏掉甫菠。
!C嵬汀寂诱!為什么Chrome中的一個頁面假死不會影響到主窗口呢?
這是因為chrome輸出實際上是圖片安聘,然后瀏覽器端把圖片貼到自己的窗口上去痰洒,在Chrome的渲染進程內(nèi),并沒有一個渲染窗口浴韭,輸出的只是圖片丘喻,如果卡住了,頂多圖片不更新了念颈。

隨著 Chrome 瀏覽器的發(fā)布泉粉,瀏覽器架構(gòu)終于來到了多進程的時代。
其中 Chrome 瀏覽器的進程架構(gòu)如下:

早期多進程架構(gòu).png

目前多進程架構(gòu).png

Chrome架構(gòu)包括:1 個瀏覽器(Browser)主進程榴芳、1 個 GPU 進程搀继、1 個網(wǎng)絡進程、多個渲染進程和多個插件進程翠语。作用如下:
Browser進程(瀏覽器進程):瀏覽器的主進程叽躯。主要有以下幾個作用:負責瀏覽器頁面的顯示與頁面交互;負責個頁面的管理(創(chuàng)建和銷毀其他進程)肌括;將 Renderer 進程得到的內(nèi)存中的 Bitmap 点骑,繪制到用戶頁面上;網(wǎng)絡資源的管理谍夭,下載等黑滴。
第三方插件進程:主要負責插件的運行,每種類型的插件都對應著一個進程紧索,只有當使用該插件時才會創(chuàng)建該進程袁辈,這樣就做到了隔離插件的效果,保證插件的崩潰不會影響到瀏覽器以及頁面珠漂。
GPU進程:為了實現(xiàn) 3D CSS 的效果晚缩,GPU進程成為了瀏覽器的普遍需求,因此Chrome瀏覽器也在其多進程的架構(gòu)上引入了GPU進程媳危。
瀏覽器渲染進程荞彼,也就是瀏覽器內(nèi)核,Renderer進程待笑,內(nèi)部是多線程的:默認每個Tab頁面都是一個進程鸣皂,互相不影響。主要作用是頁面渲染,腳本執(zhí)行寞缝,事件處理等癌压。
網(wǎng)絡進程:主要負責頁面的網(wǎng)絡資源的加載,之前是作為一個模塊運行在瀏覽器進程中的荆陆,最近幾年才獨立出來措拇,作為一個單獨的進程存在。

PS:圖解Chrome架構(gòu)
PS:Chrome底層原理

單進程瀏覽器遺留問題的解決

  1. 不穩(wěn)定:由于進程是相互隔離的慎宾,所以當一個頁面或者插件崩潰 時,影響到的僅僅是當前的頁面進程或者插件進程浅悉,并不會影響到瀏覽器和其他頁面趟据,這就完美地解決了頁面或者插件的崩潰會導致整個瀏覽器崩潰。
  2. 不流暢:在多進程的架構(gòu)下术健,JavaScript 只是運行在自己的渲染進程中的汹碱,因此即使 JavaScript 代碼阻塞了渲染進程,受到影響的也只是當前所渲染的頁面荞估,腳本運行也是同樣的道理咳促。而對于常常引發(fā)性能問題的內(nèi)存泄漏,在這種架構(gòu)下勘伺,關(guān)閉一個頁面跪腹,會將整個渲染進程給關(guān)閉,這時候操作系統(tǒng)就會回收這個進程所占用的內(nèi)存飞醉,也就會不會存在內(nèi)存泄漏的問題了冲茸。
  3. 不安全:多進程架構(gòu)的可以使用安全沙箱,你可以把沙箱看成是操作系統(tǒng)給進程上了一把鎖缅帘,沙箱里面的程序可以運行轴术, 但是不能在你的硬盤上寫入任何數(shù)據(jù),也不能在敏感位置讀取任何數(shù)據(jù)(文檔钦无、桌面)逗栽。沙箱里面,即使在渲染進程或者插件進程里面執(zhí)行了惡意程序失暂,惡意程序也無法突破沙箱去獲取系統(tǒng)權(quán)限彼宠。

多進程的瀏覽器存在著一些問題

資源占用更多了
更為復雜的體系結(jié)構(gòu)

SOA架構(gòu)

服務化:在2016年Chrome官方團隊使用面向服務的架構(gòu)的思想設(shè)計了新的Chrome架構(gòu),也就是說Chrome整體架構(gòu)會朝向現(xiàn)代操作系統(tǒng)所采用的面向服務的架構(gòu)方向發(fā)展弟塞,原來的各種模塊都會被重構(gòu)成獨立的服務兵志,每個服務都可以在獨立的進程中運行,訪問服務必須使用定義好的接口宣肚,通過IPC來通信 想罕,從而構(gòu)建一個更內(nèi)聚、松耦合、易于維護和擴展的系統(tǒng)按价,更好實現(xiàn)chrome簡單穩(wěn)定惭适,高速安全的目標 。

Chrome最終要把UI楼镐、數(shù)據(jù)庫癞志、文件、設(shè)備框产、網(wǎng)絡等模塊重構(gòu)為基礎(chǔ)服務凄杯,類似操作系統(tǒng)底層服務。

Chrome面向服務的架構(gòu)進程模型圖.png

彈性架構(gòu):將瀏覽器程序的每個部分秉宿,作為一項服務運行戒突,然后根據(jù)情況而定,來將其拆分為不同的流程或匯總為同一個流程描睦,是個資源的動態(tài)調(diào)配整合膊存。
e.g. 若瀏覽器在高性能電腦上運行時,可能會將每個服務拆分為不同的進程忱叭,從而提供更高的穩(wěn)定性隔崎。但如果不具備此條件,設(shè)備資源受到約束韵丑,多個服務就可能會被整合到一個進程當中爵卒,從而節(jié)省內(nèi)存占用。
在資源不足的設(shè)備上將服務合并到瀏覽器進程中.png

總結(jié)
PS:單進程與多進程優(yōu)缺點

問題小結(jié)

為什么單進程瀏覽器當時沒有采用安全沙箱撵彻?

因為一個進程使用了安全沙箱后技潘,該進程的系統(tǒng)權(quán)限受限,在單進程瀏覽器中千康,這將會影響主進程的權(quán)限享幽。

打開Chrome瀏覽器一個Tab頁面,至少會出現(xiàn)幾個進程拾弃?

根據(jù)目前的Chrome架構(gòu):1 個瀏覽器(Browser)主進程值桩、1 個 GPU 進程、1 個網(wǎng)絡(NetWork)進程豪椿、多個渲染進程和多個插件進程奔坟;
1. 頁面中有iframe的話,跨站點 iframe 在單個渲染器進程中運行(站點隔離)搭盾,并在不同站點之間共享內(nèi)存空間咳秉。


image.png

2. 有插件的話,插件也會開啟進程
3. 多個頁面屬于同一站點鸯隅,并且從a打開b頁面澜建,會共用一個渲染進程
4. 裝了擴展的話向挖,擴展也會占用進程
這些進程都可以通過Chrome任務管理器來查看

舉例.png

多進程架構(gòu),還是會碰到單頁面卡死的最終崩潰導致所有頁面崩潰的情況炕舵?

Chrome的默認策略是何之,每個標簽對應一個渲染進程。但是如果從一個頁面打開了新頁面咽筋,而新頁面和當前頁面屬于同一站點時溶推,那么新頁面會復用父頁面的渲染進程。那么同一個站點的其中一個頁面崩潰了奸攻,那么其他頁面也會跟著一起崩潰蒜危。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市睹耐,隨后出現(xiàn)的幾起案子辐赞,更是在濱河造成了極大的恐慌,老刑警劉巖疏橄,帶你破解...
    沈念sama閱讀 217,826評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異略就,居然都是意外死亡捎迫,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評論 3 395
  • 文/潘曉璐 我一進店門表牢,熙熙樓的掌柜王于貴愁眉苦臉地迎上來窄绒,“玉大人,你說我怎么就攤上這事崔兴≌玫迹” “怎么了?”我有些...
    開封第一講書人閱讀 164,234評論 0 354
  • 文/不壞的土叔 我叫張陵敲茄,是天一觀的道長位谋。 經(jīng)常有香客問我,道長堰燎,這世上最難降的妖魔是什么掏父? 我笑而不...
    開封第一講書人閱讀 58,562評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮秆剪,結(jié)果婚禮上赊淑,老公的妹妹穿的比我還像新娘。我一直安慰自己仅讽,他們只是感情好陶缺,可當我...
    茶點故事閱讀 67,611評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著洁灵,像睡著了一般饱岸。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,482評論 1 302
  • 那天伶贰,我揣著相機與錄音蛛砰,去河邊找鬼。 笑死黍衙,一個胖子當著我的面吹牛泥畅,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播琅翻,決...
    沈念sama閱讀 40,271評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼位仁,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了方椎?” 一聲冷哼從身側(cè)響起聂抢,我...
    開封第一講書人閱讀 39,166評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎棠众,沒想到半個月后琳疏,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,608評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡闸拿,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,814評論 3 336
  • 正文 我和宋清朗相戀三年空盼,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片新荤。...
    茶點故事閱讀 39,926評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡揽趾,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出苛骨,到底是詐尸還是另有隱情篱瞎,我是刑警寧澤,帶...
    沈念sama閱讀 35,644評論 5 346
  • 正文 年R本政府宣布痒芝,位于F島的核電站俐筋,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏严衬。R本人自食惡果不足惜校哎,卻給世界環(huán)境...
    茶點故事閱讀 41,249評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望瞳步。 院中可真熱鬧闷哆,春花似錦、人聲如沸单起。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽嘀倒。三九已至屈留,卻和暖如春局冰,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背灌危。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評論 1 269
  • 我被黑心中介騙來泰國打工康二, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人勇蝙。 一個月前我還...
    沈念sama閱讀 48,063評論 3 370
  • 正文 我出身青樓沫勿,卻偏偏與公主長得像,于是被迫代替她去往敵國和親味混。 傳聞我的和親對象是個殘疾皇子产雹,可洞房花燭夜當晚...
    茶點故事閱讀 44,871評論 2 354

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