瀏覽器基礎結構
瀏覽器基礎結構主要包括如下7部分:
-
1.用戶界面(User Interface):用戶所看到及與之交互的功能組件,如地址欄,返回,前進按鈕等;
-
2.瀏覽器引擎(Browser engine):負責控制和管理下一級的渲染引擎;
-
3.渲染引擎(Rendering engine):負責解析用戶請求的內容(如HTML或XML,渲染引擎會解析HTML或XML,以及相關CSS,然后返回解析后的內容);
-
4.網絡(Networking):負責處理網絡相關的事務,如HTTP請求等;
-
5.UI后端(UI backend):負責繪制提示框等瀏覽器組件,其底層使用的是操作系統的用戶接口;
-
6.JavaScript解釋器(JavaScript interpreter):負責解析和執行JavaScript代碼;
-
7.數據存儲(Data storage):負責持久存儲諸如cookie和緩存等應用數據
瀏覽器內核
- Trident內核: IE
- Webkit內核:Chrome,Safari
- Gecko內核:FireFox
網絡
當用戶訪問頁面時,瀏覽器需要獲取用戶請求內容,這個過程主要涉及瀏覽器網絡模塊:
1.用戶在地址欄輸入域名,如baidu.com,DNS(Domain Name System,域名解析系統)服務器根據輸入的域名查找對應IP,然后向該IP地址發起請求;
- 2.瀏覽器獲得並解析服務器的返回內容(HTTP response);
- 3.瀏覽器加載HTML文件及文件內包含的外部引用文件及圖片,多媒體等資源。
DNS預解析(DNS prefetch)
瀏覽器DNS解析大多時候較快,且會緩存常用域名的解析值,但是如果網站涉及多域名,在對每一個域名訪問時都需要先解析出IP地址,而我們希望在跳轉或者請求其他域名資源時盡量快,則可以開啟域名預解析,瀏覽器會在空閑時提前解析聲明需要預解析的域名
多進程
我們通常說JavaScript執行是單進程的,但是瀏覽器網絡部分通常是有幾個平行進程同時開啟,但是也會有
限制,一般為2-6個。
渲染引擎及關鍵渲染路徑(Critical Rendering Path)
- 1.構建DOM樹(DOM tree):從上到下解析HTML文檔生成DOM節點樹(DOM tree),也叫內容樹(content tree);
- 2.構建CSSOM(CSS Object Model)樹:加載解析樣式生成CSSOM樹;
- 3.執行JavaScript:加載並執行JavaScript代碼(包括內聯代碼或外聯JavaScript文件);
-
4.構建渲染樹(render tree):根據DOM樹和CSSOM樹,生成渲染樹(render tree);
渲染樹:按順序展示在屏幕上的一系列矩形,這些矩形帶有字體,顏色和尺寸等視覺屬性。
-
5.布局(layout):根據渲染樹將節點樹的每一個節點布局在屏幕上的正確位置;
- 6.繪制(painting):遍歷渲染樹繪制所有節點,為每一個節點適用對應的樣式,這一過程是通過UI后端模塊完成;