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

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. Converting Legacy Chrome IPC To Mojo

    Converting Legacy Chrome IPC To Mojo Looking for Mojo Documentation? Contents Overview Deciding What ...

  2. pyinstall 常见错误

    字符编码错误: https://blog.csdn.net/weixin_42426496/article/details/81102665 https://blog.csdn.net/qq_4206 ...

  3. [codevs3955]最长严格上升子序列(加强版)

    题目大意:给你一个序列,要你求该序列中最长严格上升子序列的长度. 解题思路:此题算是一道LIS模板题.普通的$O(n^2)$的LIS是会TLE的,因为$n\le 1000000$,所以此题要用单调队列 ...

  4. luogu 4844 LJJ爱数数 (莫比乌斯反演+数学推导)

    题目大意:求满足gcd(a,b,c)==1,1/a+1/b=1/c,a,b,c<=n的{a,b,c}有序三元组个数 因为题目里有LJJ我才做的这道题 出题人官方题解https://www.cnb ...

  5. 紫书 习题 8-1 UVa 1149(贪心)

    排序之后, 尽量最小和最大的放在一个背包, 放不下就放最大的. #include<cstdio> #include<algorithm> #define REP(i, a, b ...

  6. UVA 11020 Efficient Solutions+multiset的应用

    题目链接:点击进入 首先来讲,非常easy看到我们事实上仅仅要维护优势人群的集合:假设增加一个新的人,我们首先看一下优势人群中是否有人会让这个人失去优势,假设没有,则将这个人插入集合中.但要注意到这个 ...

  7. O(1)复杂度增加和删除和随机取

    题目: https://leetcode.com/problems/insert-delete-getrandom-o1-duplicates-allowed 非常好的解法: https://disc ...

  8. [Typescript] Promise based delay function using async / await

    Learn how to write a promise based delay function and then use it in async await to see how much it ...

  9. poj-2758 Checking the Text

    题意: 给定一个字符串,要求维护两种操作: I:在字符串中插入一个字符: Q:询问某两个位置開始的LCP. 插入操作<=200,字符串长度<=5w,查询操作<=2w: 题解: 第一道 ...

  10. Android之Http通信——1.初识Http协议

    Android之Http通信--1.初识Http协议 引言: 今天是六一儿童节,先在这里给各位超龄儿童说声节日快乐哈~( ╯□╰ ),小猪也象征性地给群里的小朋友们派了红包-嗯,忙碌的五月最终过去了, ...