WebKit載入流程

來源:互聯網
上載者:User

之前寫了幾篇載入流程的說明,是從下向上看,有點只見樹木不見森林的感覺。經過最近一段時間的學習,有了能加以概括抽象的方法。

WebKit載入流程和頁面組成是直接相關的,頁面就是WebKit要載入的對象。所以WebKit負責載入的類也與負責頁面管理的類相對應。Apple關於WebView的說明裡清楚表現了整頁模式上的MVC結構:

一個頁面從元素上也有其階層,並且和載入類對應,如下:

從頁面元素上講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文檔,沒有導航操作。


從這裡看到的幾個Loaders都是載入的邏輯表示,實際的載入行為交給ResourceLoader(s),即MainResourceLoader和SubresourceLoader來完成,其中包括了資源載入的隊列管理操作(ResourceLoadScheduler)。


ResourceHandle在WebKit中是一個重要的port介面,與各個平台的網路層適配,代表了一個具體的網路載入任務。


主要類的關係

FrameLoader載入時序

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

除此之此,FrameLoader還要維護曆史項(HistoryController),以對應處理Navigation操作, 詳細項目定義在FrameLoaderTypes.h中。


Document Loader

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


子資源的載入

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


CachedResourceLoader

至於CachedResourceLoader,其實就是一個封裝類,封裝了建立各類CachedResource的功能。各個需要進行載入的頁面元素會繼承自CachedResourceClient,建立CachedResourceRequest, 通過DocumentLoader/Document裡的CachedResourceLoader發起請求。


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



Memory Cache/Application Cache

為了讓使用者有更快的應用體驗,緩衝機制不能少。在WebKit裡CachedResource/CachedResourceLoader的命名裡之所以有了Cached,就是因為它們中緩衝的互動。


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


Resource Load Scheduler

在HostInformation裡儲存著兩個兩個列表,一個是使用不同優先順序數組儲存的等待載入的列表,一個是正在載入的列表。

使用scheduleServePendingRequests處理排隊的請求時,會按優先順序依序執行。下面是基本流程:



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

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


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.