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




















