前端百題斬—原來瀏覽器中存在五類進程
瀏覽器已經從單進程瀏覽器階段進化到多進程瀏覽器階段,那么瀏覽器的多進程指的是哪些進程呢?下面一起來看看。
1.瀏覽器進程
打開瀏覽器后只有一個,主要負責界面顯示、用戶交互、子進程關閉,除此之外,還會提供存儲等功能。
2.渲染進程
其主要作用是頁面渲染、腳本執行、事件處理等,默認情況下,Chrome會為每個Tab標簽創建一個渲染進程(注意:出于安全考慮,渲染進程都運行在沙箱模式下)。對于渲染進程其是由多線程組成,多線程包含以下幾個:
(1)GUI渲染線程
主要負責渲染瀏覽器界面,解析HTML、CSS、構建DOM樹和RenderObject樹,布局和繪制等。當界面需要重繪或重排時,該線程就會執行。
(2)JS引擎線程
主要負責解析并執行JS代碼。
(注意:JS引擎線程和GUI渲染線程是互斥關系,當JS引擎線程執行時GUI線程會被掛起,GUI更新會被保存在一個隊列中等到JS引擎空閑時立即執行,所以JS執行的時間過程,就會造成頁面的渲染不連貫,導致頁面渲染加載阻塞)
(3)事件觸發線程
用來控制事件循環,當js引擎執行代碼時,會將對應的任務(例如Ajax任務、鼠標點擊……)添加到事件線程中,當事件被觸發時,事件線程會把事件添加到待處理事件隊列的隊尾,等待js引擎的處理。
(4)定時觸發器線程
setInterval和setTimeout所在的線程,瀏覽器定時計數器并不是由JavaScript引擎計數的,通過單獨的線程來計時并觸發定時。(W3C在HTML標準中規定,setTimeout中低于4ms的時間間隔算4ms)
(5)異步http請求線程
用于處理請求XMLHttpRequest,在連接后是通過瀏覽器新開一個線程請求。
3.GPU進程
GPU進程只有一個。GPU使用初衷是為了實現3D CSS的效果,知識隨著網頁、Chrome的UI界面都選擇采用GPU來繪制,使得GPU成為瀏覽器的普遍需求,最后,Chrome在其多進程架構上也引入了GPU進程。
4.網絡進程
只有一個,主要負責頁面的網絡資源加載。
5.插件進程
每個類型的插件對應著一個進程,主要負責插件的運行。因為插件易崩潰,所以需要通過插件進程來隔離,以保證插件進程崩潰不會對瀏覽器和頁面造成影響。