Webkit底層原理(2)--資源加載和網絡棧

資源加載和網絡棧

使用網絡棧下載網頁和網頁中的資源是渲染引擎工作的第一步,也是非常耗時間的一步。

一、Webkit資源加載機制

1. 資源

網頁本身就是一種資源,例如圖片、視頻等。HTML支持的資源主要有以下類型:

  1. HTML:HTML元素;
  2. JavaScript:JavaScript代碼,可以內嵌在HTML文件中,也可以單獨以文件形式存在;
  3. CSS:層疊樣式表,可以內嵌在HTML文件中,也可以單獨以文件形式存在;
  4. 圖片:各種編碼格式的圖片;
  5. SVG:用於繪製SVG的2D矢量圖形表示;
  6. 字體文件:CSS3支持自定義字體;
    ……

2. 資源緩存

資源的緩存機制是提高資源使用效率的有效方法。它的基本思想是建立一個資源的緩存池,當Webkit需要請求資源的時候,先從資源池中查找相應的資源,如果存在,測從資源池中取,如果不存在,則發送請求到服務器獲取。如下圖:
在這裏插入圖片描述

3. 資源加載器

按照加載器的類型,Webkit一共有三種類型的加載器:

  1. 針對每種資源類型的特定加載器,其特點是僅加載某一種特定的資源。例如:圖片加載器、字體加載器;
  2. 資源緩存機制的資源加載器,其特點是所有特定加載器都共享它來查找並插入緩存資源。特定加載器先通過緩存機制的資源加載器來查找是否有緩存資源;
  3. 通用資源加載器,Webkit需要從網絡或者文件系統獲取資源的時候使用它,因此它被所有的特定資源加載器共享。

4. 整個加載資源的過程

具體的加載過程可以看之前我寫的一篇關於瀏覽器緩存原理的文章,很詳細!
瀏覽器緩存詳細介紹

二、Chromium多進程資源加載

資源的實際加載在各個Webkit移植中有不同的實現。Chromium採用的是多進程的資源加載機制。Renderer進程在網頁的加載過程中需要獲取資源,但是由於安全性和效率上的考慮,Renderer進程的資源獲取實際上是通過進程間通信將任務交給Browser進程來完成,Browser進程有權限從網絡或者本地獲取資源。

三、網絡棧

1. 網絡棧的基本組成

網絡棧的基本組成如下圖:
在這裏插入圖片描述

2. 網絡棧的調用過程

首先是URLRequest被上層調用並啓動的時候,它會根據URL的scheme來決定需要創建什麼類型的請求。scheme就是URL的協議類型,例如:“http://” 、“file://”,也可以是自定義的協議。其次,會創建一個對象URLRequestHttpJob,該對象從Cookie管理器獲取與該URL相關聯的信息。之後,開啓一個HTTP連接的事務。再然後是建立套接字。如果用戶設置了代理,則還需要其他代理相關的對象提供支持。

3. 域名解析(DNS)

通常情況下,用戶都是使用域名來訪問網絡資源的,所以在建立TCP連接前需要解析域名。當然,Chromium使用一個單獨的線程來處理它。同樣,爲了考慮效率,也會使用相應緩存對象對域名和地址映射關係進行保存。我們可以在地址欄輸入:chrome://net-internals/#dns來清除Chrome瀏覽器的DNS緩存信息。
在這裏插入圖片描述

4. Cookie機制

Cookie是一項很古老的技術,因爲簡單易用,所以從誕生就收到廣泛的應用。Cookie格式就是一系列的鍵值對,如下:

test=webkit;test2=chromium;Expires=2019-10-19T10:33:18.797Z;Domain=.test.con

其中test和test2是自定義關鍵字,Expires和Domain是預定義關鍵字,表示失效時間和該Cookie對應的域。基於安全性考慮,一個網頁的Cookie只能被該網站自身訪問。根據失效時間Cookie分爲會話型(Session Cookie)和持久型(Persistent Cookie)。會話型當瀏覽器退出的時候即清除,沒有失效時間的Cookie就是會話型。而持久型Cookie當瀏覽器退出的時候仍然保留,直到失效時間。在有效期內,每次訪問服務器,瀏覽器都自動將Cookie帶上。

5. 高性能網絡棧-DNS預取和TCP預連接(preconnect)

DNS預取技術,主要思想是利用現有的DNS機制,提前解析網頁中可能的網絡連接。具體來講,當用戶正在瀏覽當前網頁的時候,Chromium提取網頁中的超鏈接,將域名抽取出來,利用比較少的CPU和網絡帶寬來解析這些域名或IP地址,用戶根本感覺不到這一過程。當用戶點擊這些超鏈接的時候會省不少時間。
寫網頁的時候可以指定預取哪些域名,具體做法是:
<link rel="dns-prefetch" href="http://test.com">
當然,DNS預取技術不僅應用於網頁中的超鏈接,當用戶在地址欄中輸入地址後,候選項同輸入的地址很匹配的時候,在用戶敲下回車鍵之前,Chromium已經開始使用DNS預取技術解析該域名了。

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