今天介绍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相关推荐

  1. WebKit和Chrome源码分析

    WebKit内核源代码分析 http://blog.sina.com.cn/s/blog_53220cef0100ta1i.html 摘要:本系列通过分析WebKit的源代码,试图分析WebKit的内 ...

  2. WebKit中的Chrome和ChromeClient

    浏览器的GUI接口分成两种,一种是控件的绘制,另一种则是同应用息息相关的窗口交互操作.本文主要介绍后一种,在WebKit里面,称之为宿主窗口.Chrome类为WebKit内核定义了一系列的宿主窗口相关 ...

  3. Webkit之webkit

    nWebView 是webkit最核心的一个view,WebView管理WebFrameView和WebFrame之间的交互,一个WebView对象绑定一个window,并且要求MainFrame加载 ...

  4. WebKit(WKScriptMessageHandler)

    WebKit(展示Web界面) WebKit(WKScriptMessageHandler) WebKit(WKUIDelegate) WebKit(WKNavigationDelegate) Web ...

  5. QT webkit学习笔记(2)

    五.QWebDataBase Class介绍 QWebDataBase提供了对基于JavaScript创建的HTML 5数据库.新一代的HTML 5标准也提供对基于javaScript SQL数据库访 ...

  6. webkit入门准备

    <webkit入门准备> 1.      C++ a)        Webkit代码风格 b)        Inline c)        Const d)        构造与析构 ...

  7. 浏览器内核Trident/Gecko/WebKit/Presto

    "浏览器内核"主要指渲染引擎(Rendering Engine),负责解析网页语法(如HTML.JavaScript)并渲染.展示网页.因此,所谓的浏览器内核通常也就是指浏览器所采 ...

  8. webkit内核 css,纯CSS改变webkit内核浏览器的滚动条样式

    基于webkit的浏览器现在可以自定义其滚动条的样式了,实现代码如下: 复制代码代码如下: ::-webkit-scrollbar/*整体部分*/ { width: 10px; height:10px ...

  9. WebKit、Gecko使用图形库

    2008年11月30日 星期日 上午 01:20 阅读了之后,觉得作为浏览器内核WebKit.Gecko,为了能高效美观的显示页面的内容,选择适当的图形库非常重要.如果图形库选择不当,往往会导致页面上 ...

最新文章

  1. hdu4179 限制最短路
  2. 记一次某APK的恶意WIFI攻击
  3. 如何避免Puppeteer被前端JS检测
  4. java项目皮肤包_java swing项目皮肤包+使用方法说明
  5. [每日一题jQuery] jQuery选择器总结:进一步过滤、同级操作、后代操作
  6. UI界面设计视觉设计参考模板,解剖分层看如何更好的运用排版法则
  7. 拉取网页_用命令行管理你的 GitHub 项目,不必再开网页,官方 CLI 工具 1.0 版上线...
  8. LeetCode 119. Pascal’s Triangle II
  9. Android/ios手机销售榜信息
  10. cb rm –rf_php执行rmrf命令
  11. 销售订单(SO)新建BAPI_SALESORDER_CREATEFROMDAT2或修改BAPI_SALESORDER_CHANGE价格条件值扩大或缩小问题解决方法
  12. 基于Android的个人时间管理设计与开发
  13. cad记忆口诀_CAD的制图口诀
  14. DRAM Devices Organization
  15. 考研数学——全程复习建议(汤)
  16. Java 比较图片_Java图片比对
  17. 微信JSAPI支付调不起收银台问题
  18. uni-app相关知识积累
  19. Windows 10 调节音量时关闭浏览器播放详情
  20. 喜欢游戏学计算机,我喜欢电脑游戏小学作文

热门文章

  1. PPP概念股一览 PPP概念股盈利预测
  2. java垃圾回收简介
  3. 180701 icon文件查找与转换网站
  4. 获取linkedin上指定公司下的职员信息
  5. java的mysql语句规范_mysql 规范
  6. Python获取Win7,Win10系统缩放大小
  7. Qt QWidget播放视频背景图片闪烁
  8. .msi文件安装报错
  9. 老版三星笔记本识别不到U盘启动解决办法
  10. enc28j60 linux 驱动_linux enc28j60网卡驱动移植(硬件spi和模拟spi)