WebKit如何加载web页面
轉自http://blog.csdn.net/keensword007/archive/2010/09/03/5860837.aspx
?
在WebKit能夠渲染web頁面之前,它必須從網絡加載頁面和子資源。從web加載資源涉及到許多層,本文將集中于WebCore,即WebKit的主要渲染組件,如何參與加載過程。
WebKit包含兩條加載管道,一個用于加載文檔到框架(frame),另一個用于加載子資源(如圖片和腳本)。下圖總結了兩條管道涉及的主要對象:
加載框架(Frame)
FrameLoader負責加載文檔到框架,當您點擊鏈接的時候,FrameLoader開始創建一個新的處在“策略(policy)”狀態的DocumentLoader對象,在該狀態下等待webkit客戶決定如何處理本次加載。通??蛻糁甘綟rameLoader將加載當作導航(navigator)(而不是阻塞式加載)。
一旦客戶指示FrameLoader將加載當作導航,FrameLoader將DocumentLoader遷移到"臨時(provision)"狀態,啟動網絡請求,并等待以判斷網絡請求的結果是下載還是一個新的文檔。
接著,DocumentLoader創建MainResourceLoader,它的任務是通過ResourceHandle接口和平臺相關網絡庫交互。將MainResourceLoader從DocumentLoader分離出來有兩個目的:(1) MainResourceLoader將DocumentLoader從處理ResourceHandle回調的細節隔離開來。(2) MainResourceLoader的生命周期與DocumentLoader的生命周期(與Document緊密關聯)分離。
一旦加載系統從網絡接收到足夠的信息,判斷出接收的資源確實表示一份文檔,FrameLoader將DocumentLoader遷移到"已提交(committed)"狀態,Frame開始顯示新的文檔。
?
加載子資源(Subresource)
當然,顯示一個web頁面需要的不僅僅是組成文檔的HTML,還需要加載圖像、腳本以及其它文檔引用到的子資源。DocLoader就是負責加載這些子資源的(注意,雖然DocumentLoader和DocLoader名稱上相似,但它們的職責卻大不相同)。
我們以加載圖片為例。要加載一個圖像,DocLoader首先檢查Cache是否在內存中已經有一份圖像的副本(如CachedImage對象)。如果Cache中已經存在,DocLoader會立即響應。甚至進一步提高效率,Cache總是將解碼過的圖像放在顯存,這樣WebKit就不需要對同一圖像做兩次解碼。
如果圖像不在Cache中,Cache將創建一個新的CacheImage對象表示該圖像。CacheImage對象將要求“Loader“對象創建SubresourceLoader來啟動網絡請求。SubresourceLoader在子資源加載管道中所起的作用和MainResourceLoader在主資源加載管道中所起的作用類似,都是直接和ResourceHanle的平臺相關接口交互。
?
總結
以上是生活随笔為你收集整理的WebKit如何加载web页面的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 显卡之显卡型号及版本级别
- 下一篇: WebCore中的渲染机制(一):基础知