高层架构
| 用户界面 | 地址栏,前进/后退按钮,书签菜单等。除了主窗口显示外都属于用户界面。 |
|---|---|
| 浏览器引擎 | 在用户界面和呈现引擎之间传送指令 |
| 呈现引擎 | 负责显示请求内容。如果请求的内容是 HTML,它就负责解析 HTML 和 CSS 内容,并将解析后的内容显示在屏幕上。 |
| 网络 | 用于网络调用,比如 HTTP 请求。其接口与平台无关,并为所有平台提供底层实现。 |
| 用户界面后端 | 用于绘制基本的窗口小部件,比如组合框和窗口。其公开了与平台无关的通用接口,而在底层使用操作系统的用户界面方法。 |
| JavaScript解释器 | 用于解析和执行 JavaScript 代码。 |
| 数据存储 | 这是持久层。浏览器需要在硬盘上保存各种数据,例如 Cookie。新的 HTML 规范 (HTML5) 定义了“网络数据库”,这是一个完整(但是轻便)的浏览器内数据库。 |
呈现引擎
流程
WebKit主流程
渐进的过程,为达到更好的用户体验,呈现引擎会力求尽快将内容显示在屏幕上。
不必等到整个HTml文档解析完毕之后,就开始构建呈现树和设置布局。
在不断接收和处理来自网络的其余内容的同时,呈现引擎会将部分内容解析并显示出来。
解析
指将文档转化为有意义的结构,也就是可让代码理解和使用的结构。
解析得到的结果通常是代表了文档结构的节点树,它称作解析树或者语法树。
语法
解析是以文档所遵循的语法规则(编写文档所用的语言或格式)为基础的。所有可以解析的格式都必须对应确定的语法(由词汇和语法规则构成)。
解析器和词法分析器的组合
翻译
解析示例
正则表达式
解析器类型
自动生成解析器
HTML解析器
HTML语法定义
HTML DTD (Document Type Definition,文档类型定义)
DOM
文档对象模型 (Document Object Model)
DOM是HTML文档的对象表示,同时也是外部内容与HTML元素之间的接口。
DOM与标记之间几乎是一一对应的关系。
<html><body><p>Hello World</p><div> <img src="example.png"/></div></body></html>
WebKit CSS 解析器
呈现树和DOM树的关系

