webkit之webpage

今天介绍WebKit是如何装载一个Web Page。在WebKit开始渲染(render)一个WebPage之前,WebKit需要通过网络加载页面和页面的所有子资源。WebKit中有很多层参与了资源的加载。今天,主要解释WebCore在加载资源时的操作。

WebKit包含两个加载管线(pipeline),一个管线负责加载documents到frames中,另一个管线负责加载子资源(诸如images和scripts)。下图展示了两个管线中涉及到的主要对象:

FrameLoader中有三个DocumentLoader,其声明如下:

RefPtr<DocumentLoader> m_documentLoader;
RefPtr<DocumentLoader> m_provisionalDocumentLoader;
RefPtr<DocumentLoader> m_policyDocumentLoader;

+

加载Frames

FrameLoader负责加载documents到frames中,当点击一个连接(link),FrameLoader首先(begins by)创建一个处在“policy”状态下的DocumentLoader(注释:设置到m_policyDocumentLoader),此时DocumentLoader依据WebKit client来决定如何这个加载请求。典型情况下,WebKit client告诉FrameLoader,将这个加载请求视为一个导航(navigation)。另一种特殊情况是WebKit client告诉FrameLoader,阻止该加载请求。

当WebKit client告诉FrameLoader将加载请求视为一个导航(navigation),FrameLoader将DocumentLoader装换到“provisianl”状态(注释:设置到m_provisionalDocumentLoader),此时DocumentLoader负责发起网络请求,并且决定该请求是否导致一个下载或一个新的地document。

同时,DocumentLoader将创建一个MainResourceLoader,该MainResourceLoader负责和ResourceHandle进行交互。将MainResourceLoader和DocumentLoader分开是基于两个目的:(1) MainResourceLoader将处理ResourceHandle的回调(callback)细节和DocumentLoader隔离;(2) 将MainResourceLoader的生命周期(lifetime)与DocumentLoader生命周期解耦。

当loading system(注释:可以理解为ResourceHandle)接受到足够的信息来判断资源确实是一个document时,FrameLoader转换为“committed”状态(注释:设置m_documentLoader)。

+

加载subresources

展现一个Web Page,不仅仅只需要包含在HTML中的document,同时也需要加载相关的,诸如图片、脚本和其他子资源。DocLoader负责加载这些子资源。(注意:尽管DocumentLoader和DocLoader有相同的名字,但他们扮演的角色是完全不同的)

一个典型的例子是加载图片。DocLoader首先检查内存里的Cache中是否存在一份图片的复本(as a CachedImage object)。如果图片在Cache中存在,DocLoader立即返回。

如果图片在Cache中不存在,则Cache将创建一个新的CachedImage对象来描述该图片。CacheImage对象请求“Loader”对象发起网络请求,而Loader通过创建一个SubresourceLoader来完成网路请求。SubresourceLoader扮演的角色和MainresourcLoader扮演的角色相同,直接和ResourcHandle交互。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值