在前端面試時,面試官經常會問:瀏覽器是多進程還是單進程? 瀏覽器是多進程的,瀏覽器每一個 tab 標簽都代表一個獨立的進程(也不一定,因為多個空白 tab 標簽會合併成一個進程),瀏覽器內核(瀏覽器渲染進程)屬於瀏覽器多進程中的一種。 瀏覽器每個進程有多個線程,主要有以下線程 1)GUI 渲染線程: ...
在前端面試時,面試官經常會問:瀏覽器是多進程還是單進程?
瀏覽器是多進程的,瀏覽器每一個 tab 標簽都代表一個獨立的進程(也不一定,因為多個空白 tab 標簽會合併成一個進程),瀏覽器內核(瀏覽器渲染進程)屬於瀏覽器多進程中的一種。
瀏覽器每個進程有多個線程,主要有以下線程
1)GUI 渲染線程:
負責渲染頁面,解析 HTML,CSS 構成 DOM 樹等,當頁面重繪或者由於某種操作引起迴流都會調起該線程。
和 JS 引擎線程是互斥的,當 JS 引擎線程在工作的時候,GUI 渲染線程會被掛起,GUI 更新被放入在 JS 任務隊列中,等待 JS 引擎線程空閑的時候繼續執行。
2)JS 引擎線程:
單線程工作,負責解析運行 JavaScript 腳本。
和 GUI 渲染線程互斥,JS 運行耗時過長就會導致頁面阻塞。
3)事件觸發線程:
當事件符合觸發條件被觸發時,該線程會把對應的事件回調函數添加到任務隊列的隊尾,等待 JS 引擎處理。
4)定時器觸發線程:
瀏覽器定時計數器並不是由 JS 引擎計數的,阻塞會導致計時不准確。
開啟定時器觸發線程來計時並觸發計時,計時完成後會被添加到任務隊列中,等待 JS 引擎處理。
5)http 請求線程:
http 請求的時候會開啟一條請求線程。
請求完成有結果了之後,將請求的回調函數添加到任務隊列中,等待 JS 引擎處理。
更多前端面試題庫:https://www.kancloud.cn/lsmsky/web_quiz