码迷,mamicode.com
首页 > Web开发 > 详细

WebKit加载流程 - 概述

时间:2014-05-21 13:59:25      阅读:308      评论:0      收藏:0      [点我收藏+]

标签:webkit

之前写了几篇加载流程的说明,是从下向上看,有点只见树木不见森林的感觉。经过最近一段时间的学习,有了能加以概括抽象的方法。

WebKit加载流程和页面组成是直接相关的,页面就是WebKit要加载的对象。所以WebKit负责加载的类也与负责页面管理的类相对应。Apple关于WebView的说明里清楚表现了页面视图上的MVC结构:

bubuko.com,布布扣

一个页面从元素上也有其层次结构,并且和加载类对应,如下:

bubuko.com,布布扣

从页面元素上讲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)。

bubuko.com,布布扣


ResourceHandle在WebKit中是一个重要的port接口,与各个平台的网络层适配,代表了一个具体的网络加载任务。


主要类的关系

bubuko.com,布布扣


FrameLoader加载时序

从上面可以知道FrameLoader代表了Frame的加载行为,DocumentLoader代表了Document的加载行为。为了区分加载的进程,FrameLoader对加载状态进行了区分,并且让DocumentLoader在不同的状态间转换。除此之外FrameLoader还另外使用一个状态机,管理Frame加载显示的状态(FrameLoaderStateMachine)。

bubuko.com,布布扣

除此之此,FrameLoader还要维护历史项(HistoryController),以对应处理Navigation操作, 详细项目定义在FrameLoaderTypes.h中。


Document Loader

相对FrameLoader而言,DocumentLoader相对简单一些,它的任务就是调用一个MainResourceLoader加载主文档。因为状态的转换在FrameLoader里完成了。子资源的加载依托于DocumentLoader来管理。


子资源的加载

正如页面元素从属于Document存在一样,负责子资源的加载的类从属于Document,后来又移到了DocumentLoader类中。就形成了下面的关系:

bubuko.com,布布扣

CachedResourceLoader

至于CachedResourceLoader,其实就是一个封装类,封装了创建各类CachedResource的功能。各个需要进行加载的页面元素会继承自CachedResourceClient,创建CachedResourceRequest, 通过DocumentLoader/Document里的CachedResourceLoader发起请求。

bubuko.com,布布扣

下面是Script元素发起请求的调用:

bubuko.com,布布扣



Memory Cache/Application Cache

bubuko.com,布布扣



Resource Load Scheduler

bubuko.com,布布扣

在HostInformation里存储着两个两个列表,一个是使用不同优先级数组存储的等待加载的列表,一个是正在加载的列表。

使用scheduleServePendingRequests处理排队的请求时,会按优先级依序执行。下面是基本流程:

bubuko.com,布布扣


以上就是加载流程的概要性说明,中间缺少一些流程内容,可以参考以下两个链接:
  [WebKit]WebCore之页面加载的设计与实现(二)
  [WebKit]WebCore之页面加载的设计与实现(三)

转载请注明出处: http://blog.csdn.net/horkychen


WebKit加载流程 - 概述,布布扣,bubuko.com

WebKit加载流程 - 概述

标签:webkit

原文地址:http://blog.csdn.net/horkychen/article/details/26435373

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!