WebKit载入流程 - 概述
之前写了几篇载入流程的说明,是从下向上看,有点仅仅见树木不见森林的感觉。经过近期一段时间的学习,有了能加以概括抽象的方法。
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
WebKit载入流程 - 概述的更多相关文章
- Java虚拟机JVM学习01 流程概述
Java虚拟机JVM学习01 流程概述 Java虚拟机与程序的生命周期 一个运行时的Java虚拟机(JVM)负责运行一个Java程序. 当启动一个Java程序时,一个虚拟机实例诞生:当程序关闭退出,这 ...
- ETL流程概述及常用实现方法
ETL流程概述及常用实现方法 http://blog.csdn.net/btkuangxp/article/details/48224187 目录(?)[-] 1抽取作业 1手工开发抽取作业时候的常用 ...
- Android之SystemUI载入流程和NavigationBar的分析
Android之SystemUI载入流程和NavigationBar的分析 本篇仅仅分析SystemUI的载入过程和SystemUI的当中的一个模块StatusBar的小模块NavigationBar ...
- android7.x Launcher3源代码解析(3)---workspace和allapps载入流程
Launcher系列目录: 一.android7.x Launcher3源代码解析(1)-启动流程 二.android7.x Launcher3源代码解析(2)-框架结构 三.android7.x L ...
- MFCC特征参数提取流程概述
一 概念概述: 在语音识别(Speech Recognition)和话者识别(Speaker Recognition)方面,最常用到的语音特征就是梅尔倒谱系数(Mel-scale Frequenc ...
- 高复用率的RTSPClient组件EasyRTSPClient设计流程概述
EasyRTSPClient 设计过程 概述 EasyRTSPClient 基于live555构建而成. 今天讲讲EasyRTSPClient的设计过程 EasyRTSPClient,主要包括以下部分 ...
- Qt5的插件机制(1)--Qt 框架中的插件载入机制概述
概述 Qt的源代码中通过 Q<pluginType>Factory.Q<pluginType>Plugin 和 Q<pluginType> 这三个类实现了Qt的插件 ...
- JavaScript 引擎 V8 执行流程概述
本文首发于 vivo互联网技术 微信公众号 链接:https://mp.weixin.qq.com/s/t__Jqzg1rbTlsCHXKMwh6A作者:赖勇高 本文主要讲解的是V8的技术,是V8的入 ...
- android webkit 初始化流程
以android 4.2为例 1, android 4.2中 WebViewClassic.java 为 WebView.java的代理类. 2,程序运行后,浏览器首先加载webkit so. Web ...
随机推荐
- GDOI2016酱油记(补发)
这篇酱油记是前年发在MCHacker一个叫code-hub的博客上的(已崩),现在来补发一下... GDOI2016扯淡(爆零记) 大家好,我是巨弱DCDCBigBig,在五一期间和一群神牛去考GDO ...
- HDU 3108 Ant Trip
Ant Trip Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Su ...
- unity3D常见问题
总结自己在学习中遇到的问题. 记录问题,帮助他人,有什么不正确的地方欢迎指正 没有发生碰撞 两个物体(Plane和Cube)都加入了collider,当中一个加入了rigidbody,应该会产生碰撞, ...
- HttpClient 图讲解明
大家刚看这个名字一定会想问这是什么东东,在这我特意百度百科了下 HTTP 协议可能是如今 Internet 上使用得最多.最重要的协议了,越来越多的 Java 应用程序须要直接通过 HTTP 协议来訪 ...
- java匿名内部类的使用注意事项
1.首先匿名内部类要继承自抽象基类或者实现基类接口 like this abstract class Seed{ int cnt; public Seed(int x){ cnt=x; } abstr ...
- Swift学习笔记(二)——常量与变量
这篇博客将会学习到Swift中的常量Constants和变量Variable.这是学习语言的基础.当中能够看到Swift每句后面基本都是没有:分号的,假设有加:分号的习惯,也能够加上. (1)常量声明 ...
- 一站式学习WireShark
一 基础 http://blog.sina.com.cn/s/blog_987e00020102x5k1.html 选中一个数据包,右键选中某一个数据包,然后follow-->Tcp Strea ...
- 智课雅思短语---四、Exploit to the full one’s favorableconditions and avoid unfavorable ones
智课雅思短语---四.Exploit to the full one’s favorableconditions and avoid unfavorable ones 一.总结 一句话总结:扬长避短 ...
- 安卓开发--AsyncTask2
package com.cnn.imageasyncdemo01; import android.app.Activity; import android.content.Intent; import ...
- BZOJ 3524主席树裸题 (雾)
思路: 按权值建一棵主席树 (但是这好像不是正解 空间复杂度是不对的--.) //By SiriusRen #include <cstdio> #include <cstring&g ...