瀏覽器的組成和運行機制

瀏覽器的組成

瀏覽器由7部分組成,分別是:
用戶界面:包括瀏覽器中可見的地址輸入框,瀏覽器前進和返回按鈕,打開書籤,打開歷史記錄等
網絡:網絡功能模塊則是瀏覽器開啓網絡線程發送請求或下載資源文件的模塊,例如dom樹解析過程中請求靜態資源,首先是瀏覽器中的網絡模塊發起的
瀏覽器引擎:瀏覽器可以在用戶界面和渲染引擎之間傳送指令或在客戶端本地緩存中讀寫數據等,是瀏覽器各部分之間交互通信的核心
渲染引擎:瀏覽器渲染引擎的功能是解析dom文檔和css規則,並將內容排版到瀏覽器中,顯示有樣式的界面,也有人稱之爲模板引擎,我們通常說的瀏覽器內核則是渲染引擎
UI後端:後端則是用於繪製基本的瀏覽器窗口內控件,比如組合輸入框,按鈕,輸入框等
JS解析器:Javascript解析器則是瀏覽器解釋和執行javascript腳本的部分,例如V8引擎等
持久化數據存儲:瀏覽器持久化數據存儲則設計cookie,Localstorage等一些客戶端存儲技術,可以通過瀏覽器引擎,提供API進行調用。

瀏覽器的運行機制

1、 瀏覽器渲染使多進程的
Cpu進程
最多1個,用於3D繪製
Browser進程

  • 負責瀏覽器界面展示,與用於交互,比如前進、後退等 負責各個頁面管理,
  • 創建或者銷燬其他進程
  • 將Renderer進程得到的內存中的bitmap,繪製到用戶界面上
  • 網絡資源管理,下載等

第三方插件進程
每種類型的插件對應一個進程,僅當使用該插件的時候才創建
瀏覽器渲染進程(瀏覽器內核)
默認每個tab頁一個進程
頁面渲染,腳本執行,事件處理等
2、 瀏覽器渲染進程是多線程的
GUI渲染線程
負責渲染瀏覽器界面,解析html,css,構建dom樹和RenderObject樹,佈局和繪製等
當頁面需要重回或者由於某種操作引發迴流時,該線程就會執行
GUI渲染與js引擎時互斥的,當JS引擎執行時,GUI線程會被掛起,gui更新會被保存在一個隊列中等到JS空閒時被執行。
JS引擎線程
稱爲的JS內核,負責處理Javascript腳本程序比如V8引擎
JS引擎線程負責解析Javascript腳本,運行代碼
JS引擎一直等待任務隊列中任務的到來,然後加以處理,一個tab頁(render進程)中只有一個js線程在運行
同樣注意:GUI渲染線程與JS引擎時互斥的,所以如果JS執行時間過長,要放在body下面,否則會導致頁面渲染加載阻塞。
事件觸發線程

  • 管理着事件隊列
  • 監聽事件,符合條件時把回調函數放入事件隊列中

定時觸發器線程
SetInterval與setTimeout在此線程中計時完畢後,把回調函數放入事件隊列中
瀏覽器定時計數器並不是由javascript引擎計數的(因爲javascript引擎時單線程的,如果處於阻塞狀態就會影響計時的準確)因此通過單獨線程來計時並觸發計時器(計時完畢後,添加到到時間隊列中,等待JS引擎空閒後執行)
W3C在html標準中規定,規定要求setTimeout中低於4ms的時間間隔設爲4ms
異步http請求線程
檢測到XHR對象變化時,將回調函數放入事件隊列中
在這裏插入圖片描述

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