首先說一下單程式瀏覽器
2007年之前,市面上的瀏覽器都是單程式的,即所有頁面中所有的模組都執行在一個程式裡,這些模組包括:網路、外掛、javascript執行環境、渲染引擎、頁面展現等。
這麼多模組都執行在一個程式中,是瀏覽器不穩定、不流暢和不安全的主要因素。
1.不穩定
早起瀏覽器需要藉助外掛來實現web視訊、web遊戲等強大功能。但是外掛是及其不穩定的因素,當外掛崩潰時,會導致整個瀏覽器的崩潰,因為外掛作為一個模組與其他模組都共同執行在瀏覽器程式中。
除去外掛模組外,渲染引擎模組也是不穩定的,一些複雜的javascript程式碼會是渲染引擎模組崩潰,導致瀏覽器崩潰
2.不流暢
所有頁面的渲染模組、javascript執行環境以及外掛都執行在同一執行緒中,這就意味著同一時刻只能有一個模組可以執行。
如果有一個無限迴圈的指令碼執行在一個單程式的瀏覽器的頁面裡是,它會佔據整個執行緒,這會導致執行在該執行緒中的其它模組,都沒有機會被執行。因為瀏覽器中所有的頁面都執行在此執行緒中,所以這些頁面沒有機會被執行,這樣就會導致整個瀏覽器失去響應,變卡頓。
頁面的記憶體洩漏也會直接導致單程式變慢。執行復雜頁面時,部分記憶體不能完全被回收,這樣導致使用時間越長,記憶體佔用越高,瀏覽器就會變的越慢。
3.不安全
外掛可以使用C/C++等程式碼編寫,通過外掛可以獲取到作業系統的任何資源,當執行一個外掛時,這個外掛能完全操作你的電腦,如果是惡意外掛的話,它可以在你的電腦上釋放病毒或盜竊你的賬號密碼等。
頁面指令碼可以通過瀏覽器漏洞獲得你的系統許可權,惡意的指令碼可以通過獲取到的許可權,對你的電腦做一些惡意的事情。
多程式瀏覽器時代
(chrome程式架構圖)
從圖中可以看出,現在的chrome瀏覽器包括:一個瀏覽器主程式、多個渲染程式、多個外掛程式、網路程式、1個GPU程式。
1.瀏覽器程式:主要負責介面顯示、使用者互動、子程式管理、提供儲存功能等功能
2.渲染程式:將HTML、CSS、Javascript轉換為使用者可以互動的介面,預設情況下,chrome會為每個Tab標籤提供一個渲染程式,渲染程式是執行在沙箱模式下
3.GPU程式:chrome的UI介面都選擇使用GPU來繪製
4.網路程式:負責頁面的網路資源載入
5.外掛程式:負責外掛的執行,因為外掛的易崩潰,所以需要通過外掛程式來隔離,已保證外掛崩潰時,不會影響瀏覽器以及其他頁面資源
(如果是同一站點,從A頁面點到B頁面,此時,兩個頁面同用一個渲染程式,如果兩個頁面的站點不同,會是兩個渲染程式,如果頁面中有iframe,iframe也會自己佔用一個程式)