WebKit載入流程 - 概述

以前寫了幾篇載入流程的說明,是從下向上看,有點僅僅見樹木不見森林的感受。通過近期一段時間的學習,有了能加以歸納抽象的方法。web

WebKit載入流程和頁面組成是直接相關的,頁面就是WebKit要載入的對象。算法

因此WebKit負責載入的類也與負責頁面管理的類相相應。Apple關於WebView的說明裏清楚表現了頁面視圖上的MVC結構:數組

Structure

一個頁面從元素上也有其層次結構。並且和載入類相應,例如如下:緩存

Loading

從頁面元素上講WebView表明了一個頁面的呈現。相應一個Page. 一個Page包括一個或多個Frame,當中一個稱爲Main Frame,其餘的Frame(iframe或object元素引入HTML)稱爲Sub Frame。每一個Frame,從JavaScript裏都有一個window和document對象。網絡


頁面中的Frame,Document和子資源,相應到載入的FrameLoader, DocumentLoader和SubresourceLoader。當中Frame可以進行導航(Navigation)操做。即載入、又一次載入、前進、後退操做,而Document則表示一個詳細的HTML文檔,沒有導航操做。post


從這裏看到的幾個Loaders都是載入的邏輯表示,實際的載入行爲交給ResourceLoader(s)。即MainResourceLoader和SubresourceLoader來完畢,當中包括了資源載入的隊列管理操做(ResourceLoadScheduler)。學習

Loaders


ResourceHandle在WebKit中是一個重要的port接口,與各個平臺的網絡層適配,表明了一個詳細的網絡載入任務。spa



主要類的關係

Classes


FrameLoader載入時序

從上面可以知道FrameLoader表明了Frame的載入行爲。DocumentLoader表明了Document的載入行爲。爲了區分載入的進程。FrameLoader對載入狀態進行了區分。並且讓DocumentLoader在不一樣的狀態間轉換。除此以外FrameLoader還另外使用一個狀態機。管理Frame載入顯示的狀態(FrameLoaderStateMachine)。.net

States

除此之此,FrameLoader還要維護歷史項(HistoryController),以相應處理Navigation操做, 詳細項目定義在FrameLoaderTypes.h中。設計


Document Loader

相對FrameLoader而言,DocumentLoader相對簡單一些,它的任務就是調用一個MainResourceLoader載入主文檔。因爲狀態的轉換在FrameLoader裏完畢了。子資源的載入依託於DocumentLoader來管理。


子資源的載入

正如頁面元素從屬於Document存在同樣,負責子資源的載入的類從屬於Document,後來又移到了DocumentLoader類中。就造成了如下的關係:

SubResources

CachedResourceLoader

至於CachedResourceLoader,事實上就是一個封裝類。封裝了建立各種CachedResource的功能。

各個需要進行載入的頁面元素會繼承自CachedResourceClient,建立CachedResourceRequest, 經過DocumentLoader/Document裏的CachedResourceLoader發起請求。

States

如下是Script元素髮起請求的調用:

ScriptElement



Memory Cache/Application Cache

爲了讓用戶有更快的應用體驗。緩存機制不能少。

在WebKit裏CachedResource/CachedResourceLoader的命名裏之因此有了Cached,就是因爲它們中緩存的交互。


SubResources


WebKit也有一些算法上的說明,可以參考這裏


Resource Load Scheduler

Scheduler

在HostInformation裏存儲着兩個兩個列表,一個是使用不一樣優先級數組存儲的等待載入的列表,一個是正在載入的列表。

使用scheduleServePendingRequests處理排隊的請求時,會按優先級依序運行。

如下是基本流程:

Scheduler


以上就是載入流程的概要性說明,中間缺乏一些流程內容。可以參考如下兩個連接:
  [WebKit]WebCore之頁面載入的設計與實現(二)
  [WebKit]WebCore之頁面載入的設計與實現(三)

轉載請註明出處: http://blog.csdn.net/horkychen

相關文章
相關標籤/搜索