博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Mozilla研究—从输入URL到显示内容的基本过程
阅读量:6377 次
发布时间:2019-06-23

本文共 1097 字,大约阅读时间需要 3 分钟。

hot3.png

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部分的处理非常复杂,目前还没有弄清楚,以后再介绍吧。

转, 出处不明。

转载于:https://my.oschina.net/u/257674/blog/185906

你可能感兴趣的文章
医院CIO的一幅工作对联
查看>>
DPM灾难切换应用场景
查看>>
简单配置Oracle10g DataGuard物理备库
查看>>
网曝支付宝漏洞:手机丢了,支付宝也就完了
查看>>
4 在vCenter Server安装View Composer组件
查看>>
SFB 项目经验-24-为持久聊天室-查询或者增加成员
查看>>
Linux下配置Squid基础教程
查看>>
当Cacti遭遇大流量
查看>>
Outlook Anywhere 客户端配置详解
查看>>
《Windows Server 2008 R2系统管理实战》前言与内容提要
查看>>
轻巧的网络流量实时监控工具NTOPNG
查看>>
Access、Sql 获取当前插入的主键ID
查看>>
聚类算法之DBScan(Java实现)
查看>>
为什么要使用AOP?
查看>>
VC :模板类
查看>>
对C++中string类型的总结
查看>>
Oracle发布公共云Public Cloud
查看>>
eclipse高亮显示
查看>>
Shell 操作数据库
查看>>
if lte IE if gte IE 浏览器兼容
查看>>