Webkit之资源加载
一、webkit资源分类
webkit中有多种资源,大致分为以下几种:
- HTML文本
- CSS样式文本 - CachedCSSStyleSheet
- 字体 - CachedFont
- 图片 - CachedImage
- 只读资源 - CachedRawResource
- JavaScript文本 - CachedScript
- SVG - CachedSVGDocument
- 视频字幕 - CachedTextTrack
- XSL样式表 - CachedXSLStyleSheet
类图如下:

HTML文本是网页的主资源,它描述了网页的框架、布局。其它的便是子资源,是组成网页的子元素。
二、webkit资源加载主线
Webkit 的加载分为两条线路,一条是主资源(即HTML文本)的加载,另一条是子资源的加载。主资源里有子资源的描述信息,所以首先要加载主资源,然后加载子资源。
资源加载抽象流程图:

从流程图中我们看到,并不是等待加载主资源完成后再来解析HTML和加载子资源,而是边加载主资源然后解析HTML,边加载子资源。
四、webkit资源加载模型

资源加载都是交给CachedResourceLoader来做,最后交给ResourceLoadScheduler完成,而ResourceHandle则是与平台相关的网络实现(cf或curl等)
五、webkit资源加载过程

六、主资源和子资源的加载
主资源和子资源的加载都是通过上面的"ResourceLoaderProcess"实现的,而CachedResourceLoader则是它们的共同入口。
class CachedResourceLoader {
public:
CachedResourceHandle<CachedRawResource> requestMainResource(CachedResourceRequest&);
CachedResourceHandle<CachedImage> requestImage(CachedResourceRequest&);
CachedResourceHandle<CachedCSSStyleSheet> requestCSSStyleSheet(CachedResourceRequest&);
CachedResourceHandle<CachedCSSStyleSheet> requestUserCSSStyleSheet(CachedResourceRequest&);
CachedResourceHandle<CachedScript> requestScript(CachedResourceRequest&);
CachedResourceHandle<CachedFont> requestFont(CachedResourceRequest&, bool isSVG);
CachedResourceHandle<CachedRawResource> requestRawResource(CachedResourceRequest&);
CachedResourceHandle<CachedSVGDocument> requestSVGDocument(CachedResourceRequest&);
CachedResourceHandle<CachedXSLStyleSheet> requestXSLStyleSheet(CachedResourceRequest&);
CachedResourceHandle<CachedResource> requestLinkResource(CachedResource::Type, CachedResourceRequest&);
CachedResourceHandle<CachedTextTrack> requestTextTrack(CachedResourceRequest&);
};
CachedResourceLoader有主资源和子资源加载的方法
主资源加载:

子资源加载:(以加载图片资源为例)

参考:
http://blog.csdn.net/milado_nju/article/details/8927821
http://blog.csdn.net/horkychen/article/details/26435373
Webkit之资源加载的更多相关文章
- 聊聊浏览器(webkit)资源加载机制
一些准备 在开始这个话题之前,我们有必要简单回顾一下 浏览器(webkit)的网页渲染过程(如果想要详细了解这个过程,可以戳我几年前写的一篇文章.): 我们知道,浏览器在渲染过程中,如遇到节点需要依赖 ...
- webkit 子资源加载过程
从主控文档和子资源表单的页面.描述框架记叙文页主文档,布局.子元素.包含图片.CSS.JS等.为了显示网页,先要把资源载入到内存. 载入就是指把须要的资源载入到内存这一过程. Webkit用到非常多缓 ...
- 理解WebKit和Chromium: Chromium的多进程资源加载机制
转载请注明原文地址:http://blog.csdn.net/milado_nju ##概述 前面介绍了WebKit中的资源加载机制,其实它只是一个框架性的东西,实际的资源加载依赖于各个WebKit移 ...
- WebKit资源加载和网络栈
webkit笔记,主要来自 朱永盛 <WebKit技术内幕> 学习笔记,转载就注明原著,该书是国内仅有的Webkit内核的书籍,学习的好导师,推荐有兴趣的朋友可以购买 WebKit资源加载 ...
- 【原】从一个bug浅谈YUI3组件的资源加载
篇前声明:为了不涉及业务细节,篇内信息统一以某游戏,某功能代替 前不久,某游戏准备内测客户端,开发人员测试过程中发现某功能突然不灵了,之前的测试一切ok,没有发现任何异常,第一反应是,游戏内浏览器都是 ...
- 【Chromium中文文档】多进程资源加载
多进程资源加载(需要更新) 转载请注明出处:https://ahangchen.gitbooks.io/chromium_doc_zh/content/zh//General_Architecture ...
- Chrome设计文档-多进程资源加载
原文:Multi-process Resource Loading 背景 浏览器主进程及browser process处理所有的网络通信.原因有三点: Browser process可以控制每一个re ...
- Chromium多进程资源加载
webkit笔记,主要来自 朱永盛 <WebKit技术内幕> 学习笔记,转载就注明原著,该书是国内仅有的Webkit内核的书籍,学习的好导师,推荐有兴趣的朋友可以购买 多进程 资源的实际加 ...
- High Performance Networking in Google Chrome 进程间通讯(IPC) 多进程资源加载
小结: 1. 小文件存储于一个文件中: 在内部,磁盘缓存(disk cache)实现了它自己的一组数据结构, 它们被存储在一个单独的缓存目录里.其中有索引文件(在浏览器启动时加载到内存中),数据文件( ...
随机推荐
- hdu_4417_Super Mario(主席树)
题目链接:hdu_4417_Super Mario 题意: 给你n个树,有m个询问,每个询问有一个区间和一个k,问你这个区间内不大于k的数有多少个. 题解: 考虑用主席树的话就比较裸,当然也可以用其他 ...
- 用户id有则更新,无则添加 使用replace into (代替 insert into)
app登录成功后,调用后台,更新channel_id public function set_pushchannel($device,$channelid,$iv='' ) $sql = " ...
- satisfy_dependencies_for: Cannot satisfy the following dependencies for kmod-usb-storage:
卸载了包 : opkg remove kmod-ath9k - 3.10.49+2014-05-22-1 重新进行安装时出现如下错误: root@hbg:/tmp# opkg install /tmp ...
- Linux目录结构及快捷键
1.树形目录结构 2.最顶层:根目录 /bin 二进制可执行命令 /dev 设备特殊文件 /etc 系统管理和配置文件 /etc/rc.d 启动配置文件和脚本 /home 用户主目录的基点 /lib ...
- TortoiseGit - 版本回退
1.show log 2.点击左上角的master,选择远程的master分支 3.右击需要回退到的目标点,选择 Reset "master" to this ... 选择 Har ...
- 直接粘贴代码到网络上:command-line pastebins
软件作用 直接把管道里面的文字内容传到网站上面,然后反馈一个地址可以读取内容. 同类软件 wgetpaste dpaste pastebin pasteie 用法 介绍wgetpaste为例: GEN ...
- CURL访问url显示响应时间
curl -o /dev/null -s -w %{time_connect}:%{time_starttransfer}:%{time_total} http://www.baidu.com 时间指 ...
- python--sorted函数和operator.itemgetter函数
1.operator.itemgetter函数operator模块提供的itemgetter函数用于获取对象的哪些维的数据,参数为一些序号(即需要获取的数据在对象中的序号),下面看例子. a = [1 ...
- ural 1698. Square Country 5(记忆化搜索)
1698. Square Country 5 Time limit: 2.0 secondMemory limit: 64 MB The first arithmetical operation ta ...
- 正则匹配 sql语句参数
List<string> listcommand = new List<string>(); string sql = "update BMDMB set bmdmb ...