webkit之webpage
今天介绍WebKit是如何装载一个Web Page。在WebKit开始渲染(render)一个WebPage之前,WebKit需要通过网络加载页面和页面的所有子资源。WebKit中有很多层参与了资源的加载。今天,主要解释WebCore在加载资源时的操作。
WebKit包含两个加载管线(pipeline),一个管线负责加载documents到frames中,另一个管线负责加载子资源(诸如images和scripts)。下图展示了两个管线中涉及到的主要对象:
FrameLoader中有三个DocumentLoader,其声明如下:
RefPtr<DocumentLoader> m_documentLoader;
RefPtr<DocumentLoader> m_provisionalDocumentLoader;
RefPtr<DocumentLoader> m_policyDocumentLoader;
+
加载Frames
FrameLoader负责加载documents到frames中,当点击一个连接(link),FrameLoader首先(begins by)创建一个处在“policy”状态下的DocumentLoader(注释:设置到m_policyDocumentLoader),此时DocumentLoader依据WebKit client来决定如何这个加载请求。典型情况下,WebKit client告诉FrameLoader,将这个加载请求视为一个导航(navigation)。另一种特殊情况是WebKit client告诉FrameLoader,阻止该加载请求。
当WebKit client告诉FrameLoader将加载请求视为一个导航(navigation),FrameLoader将DocumentLoader装换到“provisianl”状态(注释:设置到m_provisionalDocumentLoader),此时DocumentLoader负责发起网络请求,并且决定该请求是否导致一个下载或一个新的地document。
同时,DocumentLoader将创建一个MainResourceLoader,该MainResourceLoader负责和ResourceHandle进行交互。将MainResourceLoader和DocumentLoader分开是基于两个目的:(1) MainResourceLoader将处理ResourceHandle的回调(callback)细节和DocumentLoader隔离;(2) 将MainResourceLoader的生命周期(lifetime)与DocumentLoader生命周期解耦。
当loading system(注释:可以理解为ResourceHandle)接受到足够的信息来判断资源确实是一个document时,FrameLoader转换为“committed”状态(注释:设置m_documentLoader)。
+
加载subresources
展现一个Web Page,不仅仅只需要包含在HTML中的document,同时也需要加载相关的,诸如图片、脚本和其他子资源。DocLoader负责加载这些子资源。(注意:尽管DocumentLoader和DocLoader有相同的名字,但他们扮演的角色是完全不同的)
一个典型的例子是加载图片。DocLoader首先检查内存里的Cache中是否存在一份图片的复本(as a CachedImage object)。如果图片在Cache中存在,DocLoader立即返回。
如果图片在Cache中不存在,则Cache将创建一个新的CachedImage对象来描述该图片。CacheImage对象请求“Loader”对象发起网络请求,而Loader通过创建一个SubresourceLoader来完成网路请求。SubresourceLoader扮演的角色和MainresourcLoader扮演的角色相同,直接和ResourcHandle交互。
webkit之webpage相关推荐
- WebKit和Chrome源码分析
WebKit内核源代码分析 http://blog.sina.com.cn/s/blog_53220cef0100ta1i.html 摘要:本系列通过分析WebKit的源代码,试图分析WebKit的内 ...
- WebKit中的Chrome和ChromeClient
浏览器的GUI接口分成两种,一种是控件的绘制,另一种则是同应用息息相关的窗口交互操作.本文主要介绍后一种,在WebKit里面,称之为宿主窗口.Chrome类为WebKit内核定义了一系列的宿主窗口相关 ...
- Webkit之webkit
nWebView 是webkit最核心的一个view,WebView管理WebFrameView和WebFrame之间的交互,一个WebView对象绑定一个window,并且要求MainFrame加载 ...
- WebKit(WKScriptMessageHandler)
WebKit(展示Web界面) WebKit(WKScriptMessageHandler) WebKit(WKUIDelegate) WebKit(WKNavigationDelegate) Web ...
- QT webkit学习笔记(2)
五.QWebDataBase Class介绍 QWebDataBase提供了对基于JavaScript创建的HTML 5数据库.新一代的HTML 5标准也提供对基于javaScript SQL数据库访 ...
- webkit入门准备
<webkit入门准备> 1. C++ a) Webkit代码风格 b) Inline c) Const d) 构造与析构 ...
- 浏览器内核Trident/Gecko/WebKit/Presto
"浏览器内核"主要指渲染引擎(Rendering Engine),负责解析网页语法(如HTML.JavaScript)并渲染.展示网页.因此,所谓的浏览器内核通常也就是指浏览器所采 ...
- webkit内核 css,纯CSS改变webkit内核浏览器的滚动条样式
基于webkit的浏览器现在可以自定义其滚动条的样式了,实现代码如下: 复制代码代码如下: ::-webkit-scrollbar/*整体部分*/ { width: 10px; height:10px ...
- WebKit、Gecko使用图形库
2008年11月30日 星期日 上午 01:20 阅读了之后,觉得作为浏览器内核WebKit.Gecko,为了能高效美观的显示页面的内容,选择适当的图形库非常重要.如果图形库选择不当,往往会导致页面上 ...
最新文章
- hdu4179 限制最短路
- 记一次某APK的恶意WIFI攻击
- 如何避免Puppeteer被前端JS检测
- java项目皮肤包_java swing项目皮肤包+使用方法说明
- [每日一题jQuery] jQuery选择器总结:进一步过滤、同级操作、后代操作
- UI界面设计视觉设计参考模板,解剖分层看如何更好的运用排版法则
- 拉取网页_用命令行管理你的 GitHub 项目,不必再开网页,官方 CLI 工具 1.0 版上线...
- LeetCode 119. Pascal’s Triangle II
- Android/ios手机销售榜信息
- cb rm –rf_php执行rmrf命令
- 销售订单(SO)新建BAPI_SALESORDER_CREATEFROMDAT2或修改BAPI_SALESORDER_CHANGE价格条件值扩大或缩小问题解决方法
- 基于Android的个人时间管理设计与开发
- cad记忆口诀_CAD的制图口诀
- DRAM Devices Organization
- 考研数学——全程复习建议(汤)
- Java 比较图片_Java图片比对
- 微信JSAPI支付调不起收银台问题
- uni-app相关知识积累
- Windows 10 调节音量时关闭浏览器播放详情
- 喜欢游戏学计算机,我喜欢电脑游戏小学作文