现代浏览器的组成与结构
1 .shell:浏览器外壳,菜单,工具栏等,主要是给用户界面操作,参数设置,调动内核来实现各种功能。
2 .内核:基于标识语言显示内容的程序和模块,包括渲染引擎和js引擎
3 .
浏览器常用组件
1 .用户界面
2 .浏览器引擎:在用户界面和呈现引擎之间传送指令
3 .呈现引擎:负责显示请求的内容,如果请求的内容是html,则开始解析html和css内容,并将解析后的内容直接显示在屏幕上
4 .网络:用户网络调用,其接口与平台无关,并未所有平台提供底层实现
5 .用户界面后端,用于绘制基本的窗口小部件,比如组合框和窗口,期公开了与平台无关的通用接口,而在底层使用操作系统的用户界面方法
6 .js解释器。这是持久层,浏览器需要在硬盘上保存各种数据,例如cookie。新的html规范定义了网络数据库,这是一个完整的浏览器内数据库
7 .chrome浏览器的每个标签页面都分别对应一个呈现引擎实例。
8 .
呈现引擎的工作流程
1 .从网络层获取请求文档的内容,内容的大小一般限制在8000个块以内(块是什么单位?)
2 .html文档--dom节点,主要解析三个东西,html,css,js,解析css产生css规则树,解析js主要是通过dom api和cssom api来操作dom tree和css
3 .css文件--style Rules。
4 .render Rules:带有多个视觉属性的矩形,这些矩形的排列顺序就是他们将在屏幕上显示的顺序。render tree渲染树并不等同于dom树,因为一些像是header或display:none的东西是没有必要放在渲染树里面。css的ruler tree主要是为了完成匹配并把css ruler附加上rendering tree上的每个element,也就是dom节点
5 .布局阶段,为每个节点分配一个应该出现在屏幕上的确切坐标。计算每个element确切的显示位置,就是layout和reflow的过程
6 .绘制-呈现引擎会遍历呈现树,然后用户界面后端将每个节点绘制出来。
通过调用操作系统native gui的api绘制将每一个节点绘制出来
7 .值得注意的是,以上步骤不是顺序进行的,而是一个渐进的过程,为了尽快的显示内容在屏幕上,不必等到整个html都被解析出来之后,开始构建呈现树和设置布局,在不断接收来自网络的其余内容的同时,呈现引擎会将部分内容解析并且显示出来