瀏覽器的組成結構
-
用戶界面(User Interface) - 包括地址欄、前進/后退按鈕、書簽菜單等。除了瀏覽器主窗口顯示的您請求的頁面外,其他顯示的各個部分都屬於用戶界面。
-
瀏覽器引擎(Browser engine) - 在用戶界面和渲染引擎之間傳送指令。
-
渲染引擎(Rendering engine) - 負責顯示請求的內容。如果請求的內容是 HTML,它就負責解析 HTML 和 CSS 內容,並將解析后的內容顯示在屏幕上。
也可以叫呈現引擎(Rendering Engine)或者布局引擎(Layout Engine)
默認情況下,渲染引擎可顯示 HTML 和 XML 文檔與圖片。通過插件(或瀏覽器擴展程序),還可以顯示其他類型的內容;例如,使用 PDF 查看器插件就能顯示 PDF 文檔。但是在本章中,我們將集中介紹其主要用途:顯示使用 CSS 格式化的 HTML 內容和圖片。
瀏覽器(Firefox、Chrome 瀏覽器和 Safari)是基於兩種渲染引擎構建的。Firefox 使用的是 Gecko,這是 Mozilla 公司“自制”的渲染引擎。而 Safari 和 Chrome 瀏覽器使用的都是 WebKit。
瀏覽器 渲染引擎(開發語言) 腳本引擎(開發語言) Chrome Blink (c++) V8 (c++) Opera Blink (c++) V8 (c++) Safari Webkit (c++) JavaScript Core (nitro) FireFox Gecko (c++) SpiderMonkey (c/c++) Edge EdgeHTML (c++) Chakra JavaScript Engine (c++) IE Trident (c++) Chakra JScript Engine (c++) Firefox在2017年啟用了新的web引擎Quantum,Quantum 以 Gecko 引擎為基礎,同時利用了 Rust 的良好並發性和 Servo 的高性能組件,為 Firefox 帶來了更多的並行化和 GPU 運算,讓 Firefox 更快更可靠。
2015 年 3 月,微軟將放棄自家Edge:轉而開發Chromium內核瀏覽器。
WebKit 是一種開放源代碼渲染引擎,起初用於 Linux 平台,隨后由 Apple 公司進行修改,從而支持蘋果機和 Windows。有關詳情,請參閱 webkit.org
-
網絡(Networking) - 用於網絡調用,比如 HTTP 請求。其接口與平台無關,並為所有平台提供底層實現。
-
用戶界面后端(UI Backend) - 用於繪制基本的窗口小部件,比如組合框和窗口。其公開了與平台無關的通用接口,而在底層使用操作系統的用戶界面方法。
-
JavaScript 解釋器(JavaScript Interpreter)。用於解析和執行 JavaScript 代碼,如 V8 引擎。
JS引擎線程負責解析Javascript腳本,運行代碼。
JS引擎一直等待任務隊列中任務的到來,然后加以處理,一個Tab頁(renderer進程)中只有一個JS線程在運行
-
數據存儲(Data Persistence)。這是持久層。瀏覽器需要在硬盤上保存各種數據,例如 Cookie。新的 HTML 規范 (HTML5) 定義了“網絡數據庫”,這是一個完整(但是輕便)的瀏覽器內數據庫。