瀏覽器進程線程、Web Workers、Event Loop 圖解

在網上發現了一篇很好的博客文章,對瀏覽器進程線程、Web Workers、Event Loop 等都解釋得通俗易懂。在此,我根據其內容做了幾張思維導圖,對照着文章看可加深理解。

博客地址是: http://www.dailichun.com/2018...

目錄

1、區分進程和線程

圖片描述

在系統的任務管理器中可以查看當前正在運行的各種進程。

clipboard.png

2、瀏覽器是多進程的

圖片描述

打開 chrome 的任務管理器,可以看到當前瀏覽器裏的進程。在這裏瀏覽器應該也有自己的優化機制,有時候打開多個tab頁後,可以在Chrome任務管理器中看到,有些進程被合併了,如下圖:

clipboard.png

3、重點是瀏覽器內核(渲染進程)

圖片描述

請牢記,瀏覽器的渲染進程是多線程的

4、Browser進程和瀏覽器內核(Renderer進程)的通信過程(文章原圖)

clipboard.png

  1. Browser進程收到用戶請求,首先需要獲取頁面內容(譬如通過網絡下載資源),隨後將該任務通過RendererHost接口傳遞給Render進程
  2. Renderer進程的Renderer接口收到消息,簡單解釋後,交給渲染線程,然後開始渲染
  3. 渲染線程接收請求,加載網頁並渲染網頁,這其中可能需要Browser進程獲取資源和需要GPU進程來幫助渲染,當然可能會有JS線程操作DOM(這樣可能會造成迴流並重繪)
  4. 最後Render進程將結果傳遞給Browser進程
  5. Browser進程接收到結果並將結果繪製出來

5、WebWorker與SharedWorker

圖片描述

本質上就是進程和線程的區別。SharedWorker由獨立的進程管理,WebWorker只是屬於render進程下的一個線程

6、瀏覽器渲染流程(文章原圖)

clipboard.png

  • 解析html建立dom樹
  • 解析css構建render樹(將CSS代碼解析成樹形的數據結構,然後結合DOM合併成render樹)
  • 佈局render樹(Layout/reflow),負責各元素尺寸、位置的計算
  • 繪製render樹(paint),繪製頁面像素信息
  • 瀏覽器會將各層的信息發送給GPU,GPU會將各層合成(composite),顯示在屏幕上。

7、Event Loop(結合 ES6 的 microtask 與 macrotask)

簡單版:

clipboard.png

複雜版:
圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章