Mozilla研究—从输入URL到显示内容的基本过程

本文详细介绍了Mozilla浏览器从输入URL到页面内容展示的全过程,包括URL修正、创建URI对象、缓存检查、创建Channel、数据解析及布局等多个关键步骤。

Mozilla研究—从输入URL到显示内容的基本过程

按我的想象,从输入URL到显示内容的过程非常简单:连接到服务器—下载文件—解析内容—排版布局。而在Mozilla中,实际情况虽然大体差不多,由于中间绕了不少圈子,整个过程显得比较复杂了。这里简单介绍一下:

1. 修正URL。用户输入的URL可能不合规范,在URLnsDocShell::LoadURI中,mozilla会调用URIFixup对其进行修正。它不但可以进行诸如加上scheme之类的简单修正,还可以到指定的URL上去进行关键字查询,以获取真正的URL。

2. 创建URI对象。调用nsIIOService接口的GetProtocolHandler函数,通过scheme查询到URI对应的nsIProtocolHandler,然后调用NS_NewURI创建URI对象。

3. 检查Cache文件。除了像REFRESH之类的操作不允许取cache的情况外,其它情况都先调用nsIDocShellHistory的函数,看看能否从历史记录中获取cache的文件。

4. 创建Channel。在nsDocShell::DoURILoad调用NS_NewChannel创建Channel。

5. 设置Cookie等信息,然后调用AsyncOpen打开Channel。

6. 转发数据到nsParser。当有数据可用时,会触发nsInputStreamReadyEvent事件,经过nsInputStreamPump等对象的转发,数据最终被送到nsParser。

7. 解析数据。nsParser解析数据生成各个元素(Element),解析器的代码在parser/htmlparser/src目录下,它支持增量解析,所以可以在文件传输过程中,边传输边解析,而不必等到传输完成之后才解析。

8. CNavDTD做语法检查,并做适当的修正。CNavDTD实现了nsIDTD接口。整个解析器的架构是Builder模式的变种,它在Director(即nsParser)和Builder(HTMLContentSink)之间,加了这样一个nsIDTD,以便对错误的语法进行修正。

9. HTMLContentSink构建nsDocument。

10. nsDocument经PresShell调用nsCSSFrameConstructor去创建各种layout元素。

Layout部分的处理非常复杂,目前还没有弄清楚,以后再介绍吧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值