那是由於現代瀏覽器採用的都是多進程瀏覽器
,每一個進程處理一個任務。 以chrome
瀏覽器爲例,打開一個chrome
瀏覽器最少會產生4
個進程,分別是:c++
1. 瀏覽器進程 2. 網絡進程 3. GPU進程 4. 頁面進程(正常狀況下一個頁面一個進程,特殊狀況下面詳細講) 5. 插件進程(若是有插件的話,一個插件一個進程)
詳細以下圖:(如何查看下圖這種詳細的進程,chrome右上角三個點 --> 更多工具 --> 任務管理器)
chrome
chrome 默認每一個頁面一個進程,特殊狀況:若是你從當前頁面進入另外一個新的頁面,並且新頁面的域名和當前頁面同樣,那麼新頁面會共用當前頁面的頁面進程,以下圖:(場景:我從文章的評論者的名字進入了他的我的主頁)瀏覽器
chrome
要建立這麼多進程,之前的單進程架構
很差嗎?先說說以前的單進程架構存在的問題
:安全
不流暢
網絡
使用同一個進程,插件會堵塞頁面的加載
。不安全
架構
插件的權限過大,能夠讀取和修改本地文件
,甚至修改電腦配置文件(使用c/c++編寫的插件,能夠徹底控制你的電腦)。不穩定
工具
大部分是第三方編寫的,水平良莠不齊,崩潰也是屢見不鮮
,插件的崩潰將直接致使瀏覽器無響應或崩潰。因此在多年的研究、開發後,多進程架構
c位出道,基本解決了這些的問題:spa
流暢性
:插件
插件和頁面的js只能影響本身的進程
,死循環或資源加載慢只能影響本身。(固然 現代瀏覽器特別吃cpu和內存資源,cpu內存吃滿了仍是會卡,多進程瀏覽器的缺點)安全性
code
沙箱機制,沒法寫數據,只能讀有限的數據
,一般是你當前域名下載的文件,將惡意插件和js的後門堵死了。穩定性
:
進程間是相互隔離的
,因此當一個頁面或一個插件崩潰時,僅僅只會影響到當前頁面和那個插件自己,完美解決一顆老鼠屎的問題。歡迎交流,有不完善的地方歡迎指出