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

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载入流程 - 概述的更多相关文章

  1. Java虚拟机JVM学习01 流程概述

    Java虚拟机JVM学习01 流程概述 Java虚拟机与程序的生命周期 一个运行时的Java虚拟机(JVM)负责运行一个Java程序. 当启动一个Java程序时,一个虚拟机实例诞生:当程序关闭退出,这 ...

  2. ETL流程概述及常用实现方法

    ETL流程概述及常用实现方法 http://blog.csdn.net/btkuangxp/article/details/48224187 目录(?)[-] 1抽取作业 1手工开发抽取作业时候的常用 ...

  3. Android之SystemUI载入流程和NavigationBar的分析

    Android之SystemUI载入流程和NavigationBar的分析 本篇仅仅分析SystemUI的载入过程和SystemUI的当中的一个模块StatusBar的小模块NavigationBar ...

  4. android7.x Launcher3源代码解析(3)---workspace和allapps载入流程

    Launcher系列目录: 一.android7.x Launcher3源代码解析(1)-启动流程 二.android7.x Launcher3源代码解析(2)-框架结构 三.android7.x L ...

  5. MFCC特征参数提取流程概述

      一 概念概述: 在语音识别(Speech Recognition)和话者识别(Speaker Recognition)方面,最常用到的语音特征就是梅尔倒谱系数(Mel-scale Frequenc ...

  6. 高复用率的RTSPClient组件EasyRTSPClient设计流程概述

    EasyRTSPClient 设计过程 概述 EasyRTSPClient 基于live555构建而成. 今天讲讲EasyRTSPClient的设计过程 EasyRTSPClient,主要包括以下部分 ...

  7. Qt5的插件机制(1)--Qt 框架中的插件载入机制概述

    概述 Qt的源代码中通过 Q<pluginType>Factory.Q<pluginType>Plugin 和 Q<pluginType> 这三个类实现了Qt的插件 ...

  8. JavaScript 引擎 V8 执行流程概述

    本文首发于 vivo互联网技术 微信公众号 链接:https://mp.weixin.qq.com/s/t__Jqzg1rbTlsCHXKMwh6A作者:赖勇高 本文主要讲解的是V8的技术,是V8的入 ...

  9. android webkit 初始化流程

    以android 4.2为例 1, android 4.2中 WebViewClassic.java 为 WebView.java的代理类. 2,程序运行后,浏览器首先加载webkit so. Web ...

随机推荐

  1. shell-3.bash的基本功能: history tab alias 快捷键

  2. ASM磁盘组中的AU与条带

    一.AU与条带(AU和条带就是一个分配单位,数据会被以一定单位分割,存储在多个磁盘中.分割单位的大小由AU.条带来决定. ASM有两种条带: 1.不可调粗粒度: 相当于ASM没有条带,或者说AU就是条 ...

  3. 3ds Max制作一面飘扬的旗帜效果图

    在大家平时建模过程中肯定会遇到很多力学作用的模型,它们有很多的不确定性,通过人工拖拽的手段很难达到理想的自然效果,这时我们就需要一些特殊的命令来完成我们模拟自然状态的效果.下面我们就一面飘扬的国旗来探 ...

  4. 为什么maven 创建web工程不自动生成Deployment Descriptor:工程名

    上面图切换成下面图: 点击eclipse右上角,如下图红圈,然后在选择javaEE这样就切换成javaEE视图了 如果还是不能解决,相信这个链接对你有所帮助:https://www.cnblogs.c ...

  5. 路飞学城Python-Day17

    [1.编程范式] 1.面向过程编程 2.面向对象编程 [2.面向过程编程] 面向过程:核心就是过程   什么是过程? 过程指的是解决问题的步骤,先做什么,在作什么,面向过程就像是设计一个流水线,是一种 ...

  6. How Javascript works (Javascript工作原理) (九) 网页消息推送通知机制

    个人总结: 1.介绍了网页消息推送通知机制 全文地址:https://github.com/Troland/how-javascript-works 这是 JavaScript 工作原理的第九章. 现 ...

  7. Android群英传-拼图游戏puzzle-6点吐槽

    一.缘由  经常写文章,混了一些C币.最近在深入学习Android应用开发,就从商城里买了一本<Android群英传>.这本书的内容,不是纯粹的入门那种,分几个章节,重点讲解Activit ...

  8. Android自己定义处理崩溃异常

    用过安卓手机的用户以及安卓开发人员们会时长碰到程序异常退出的情况.普通用户遇到这样的情况,肯定非常恼火,甚至会骂一生垃圾软件,然后卸载掉.那么开发人员们在开发过程中遇到这样的情况给怎么办呢,当然,你不 ...

  9. js 压缩图片 H5

    原理 用 canvas的 toDataURI (type , int )  如果type参数的值为image/jpeg或image/webp,则第二个参数的值如果在0.0和1.0之间的话,会被看作是图 ...

  10. Android Shape使用

    说明 在Android开发中,使用shape可以很方便的帮我们画出想要的背景,相对于png图片来说,使用shape可以减少安装包的大小,而且能够更好的适配不同的手机. 使用 先贴出官网上的说明: &l ...