1. 程式人生 > >Browser進程和瀏覽器內核(Renderer進程)的通信過程

Browser進程和瀏覽器內核(Renderer進程)的通信過程

不錯 控制 兩個 info 分享 簡化 end 請求 結果

看到這裏,首先,應該對瀏覽器內的進程和線程都有一定理解了,那麽接下來,再談談瀏覽器的Browser進程(控制進程)是如何和內核通信的,

這點也理解後,就可以將這部分的知識串聯起來,從頭到尾有一個完整的概念。

如果自己打開任務管理器,然後打開一個瀏覽器,就可以看到:任務管理器中出現了兩個進程(一個是主控進程,一個則是打開Tab頁的渲染進程)
然後在這前提下,看下整個的過程:(簡化了很多)

  • Browser進程收到用戶請求,首先需要獲取頁面內容(譬如通過網絡下載資源),隨後將該任務通過RendererHost接口傳遞給Render進程

  • Renderer進程的Renderer接口收到消息,簡單解釋後,交給渲染線程,然後開始渲染

    • 渲染線程接收請求,加載網頁並渲染網頁,這其中可能需要Browser進程獲取資源和需要GPU進程來幫助渲染

    • 當然可能會有JS線程操作DOM(這樣可能會造成回流並重繪)

    • 最後Render進程將結果傳遞給Browser進程

  • Browser進程接收到結果並將結果繪制出來

這裏繪一張簡單的圖:(很簡化)

技術分享圖片

看完這一整套流程,應該對瀏覽器的運作有了一定理解了,這樣有了知識架構的基礎後,後續就方便往上填充內容。

這塊再往深處講的話就涉及到瀏覽器內核源碼解析了,不屬於本文範圍。

如果這一塊要深挖,建議去讀一些瀏覽器內核源碼解析文章,或者可以先看看參考下來源中的第一篇文章,寫的不錯

Browser進程和瀏覽器內核(Renderer進程)的通信過程