webkit内核源代码导读2: FrameLoader的初步分析
来源:互联网 发布:阿里云备案账号是什么 编辑:程序博客网 时间:2024/05/16 11:59
从网页加载开始
阅读webkit的代码,从网页加载开始。FrameLoader就是执行加载的代码。FrameLoader的load方法是加载的入口函数。load方法有若干个重载,但是最终都会调用到一个终极load方法。 另外,load过程是异步的,并在load过程中,有多种控制加载是否继续的策略。
这些在我们分析源码的时候,都忽略掉。他们对我们理解加载的主要过程没有任何影响。
了解FrameLoader主要相关类
- DocummentLoader: 顾名思义,不讲了;
- MainResourceLoader:加载网页的Loader。网页被成为主资源,网页所引用的css, js, image等资源,被称为子资源
- CachedResourceLoader: 从缓存中获取资源
- DocumentWriter : 将获取的数据流写入到这个writer中,它可以看作一个缓冲区,它负责进行处理 (交给DocumentParser进行解析,下章将详细说明)
- 资源加载的具体工作,由专门的ResourceLaoder和Cache模块来实现,模块独立性比较高。
主资源加载过程
以一个单独的网页来说明这个过程,使用序列图
该图对FrameLoader做了高度简化,因此,在阅读源代码时,需要注意找关键点来阅读。
- 从FrameLoader的load函数开始,经过一系列处理后,它终于调用到DocumentLoader的startLoadingMainResource函数,进而调用到MainResourceLoader的load
- MainResourceLoader负责调用真正的资源加载模块。当收到数据后,资源加载模块会调用它的receivedData函数
- DocumentLoader调用FrameLoaderClient的函数可以忽略了,这是为了给外部代码一个机会来处理收到的数据。当committedData被调用后,数据被写入到DocumentWriter中
- DocumentWriter可以理解为一个缓冲区,DocumentWriter在调用DocuementParser来执行代码解析的工作。
这一部分仅是主资源加载的功能,对于子资源的加载,是通过和DocumentParser的交互来完成的。这一点在讲解解析器的时候会提到。
这里有必要提醒一下:DocumentLoader的commitData函数第一次收到数据时,它会调用DocumentWriter的begin函数。这个函数会调用DocumentWriter::createDocument来创建一个Document对象。然后从Document对象中取得一个DocumentParser对象,调用它的appendBytes方法。
DocumentWriter::createDocument方法会根据URL创建不同的Document。对于我们,感兴趣的是它会创建HTMLDocument对象。 详细可以查阅DOMImplementation::createDocument的实现。
- webkit内核源代码导读2: FrameLoader的初步分析
- webkit内核源代码导读
- WebKit 内核源码分析 (二) FrameLoader
- Webkit FrameLoader分析
- Webkit FrameLoader分析
- Webkit FrameLoader分析
- webkit内核源代码导读3:HTML的解析过程
- webkit内核源代码导读1:前言及webcore最基本的类
- WebKit 内核源代码分析 ( 四 )
- WebKit内核源代码分析(3)
- WebKit 内核源代码分析 ( 四 )
- WebKit 内核源代码分析 ( 四 )
- WebKit内核源代码分析(五)
- WebKit 内核源代码分析 ( 四 )
- WebKit内核源代码分析(一)
- WebKit 内核源代码分析 ( 四 )
- WebKit内核源代码分析(五)
- WebKit 内核源代码分析 ( 四 )
- 启动java并得到当前进程的pid
- PHP正则提取或替换img标记属性
- ImageViewLoader学习
- 解决ubuntu12.04下eclipse3.7启动问题--Could not load SWT library
- 消除关于.NET的四个误解
- webkit内核源代码导读2: FrameLoader的初步分析
- How to select different app.config for several build configurations
- SGU142 Keyword
- Android 开发常用代码片段
- 1.2 JavaScript流程控制
- dudu kan
- PHP超全局变量:$_SERVER
- webui框架的利与弊
- 1.2 JavaScript运算符