Browser進程和瀏覽器內核(Renderer進程)的通信過程
阿新 • • 發佈:2018-11-12
不錯 控制 兩個 info 分享 簡化 end 請求 結果
看到這裏,首先,應該對瀏覽器內的進程和線程都有一定理解了,那麽接下來,再談談瀏覽器的Browser進程(控制進程)是如何和內核通信的,
這點也理解後,就可以將這部分的知識串聯起來,從頭到尾有一個完整的概念。
如果自己打開任務管理器,然後打開一個瀏覽器,就可以看到:任務管理器中出現了兩個進程(一個是主控進程,一個則是打開Tab頁的渲染進程),
然後在這前提下,看下整個的過程:(簡化了很多)
-
Browser進程收到用戶請求,首先需要獲取頁面內容(譬如通過網絡下載資源),隨後將該任務通過RendererHost接口傳遞給Render進程
-
Renderer進程的Renderer接口收到消息,簡單解釋後,交給渲染線程,然後開始渲染
-
渲染線程接收請求,加載網頁並渲染網頁,這其中可能需要Browser進程獲取資源和需要GPU進程來幫助渲染
-
當然可能會有JS線程操作DOM(這樣可能會造成回流並重繪)
-
最後Render進程將結果傳遞給Browser進程
-
Browser進程接收到結果並將結果繪制出來
這裏繪一張簡單的圖:(很簡化)
看完這一整套流程,應該對瀏覽器的運作有了一定理解了,這樣有了知識架構的基礎後,後續就方便往上填充內容。
這塊再往深處講的話就涉及到瀏覽器內核源碼解析了,不屬於本文範圍。
如果這一塊要深挖,建議去讀一些瀏覽器內核源碼解析文章,或者可以先看看參考下來源中的第一篇文章,寫的不錯
Browser進程和瀏覽器內核(Renderer進程)的通信過程