浏览器内部原理

浏览器组成

1.用户界面:包括地址栏,书签,回退前进按钮等;
2.浏览引擎:查询和操纵渲染引擎的接口
3.渲染引擎:负责展示请求的内容;
4.网络:用于网络调用,比如http请求;具有平台依赖性,实现根据平台而定;
5.ui backend:用于绘制基本的组件,比如窗口,底层依赖操纵系统的接口;
6.js解释器:解析执行js代码;
7.数据存储:这是一个持久层,浏览器需要存储各种类型的数据,例如cookie,webdatabase等;

浏览器组成

各组件直接的通信

主要流程

渲染引擎在得到网络层请求的内容以后开始工作,内容通常最大为8k的数据块;
渲染流程是:
解析html构造DOM树 -->  渲染树 --> 布局渲染树  -->  绘制渲染树

渲染引擎解析html文档,把标签转换成树状结构中的dom节点,叫做内容树。也要解析样式数据,内外部的样式信息一起用于构造渲染树;
渲染树是包含颜色和尺寸等属性的长方形,按照正确的顺序在屏幕上显示;

在构造完渲染树以后,还要经历布局过程;这意味着要给每一个节点一个在屏幕上显示的坐标。
下一步是绘制,遍历渲染树,其每个节点都使用ui backend 层绘制;

需要理解的是这是一个逐步的过程,对于更好的用户体验,渲染引擎会尝试尽量尽快显示内容,在不会等所有的html都被解析完才开始构建和布局渲染树之前;

Webkit main flow Gecko main flow

打开一个页面,为什么有4个进程

目前的多进程架构浏览器Chrome包括,1个浏览器主进程,1个GPU进程,1个网络进程,多个渲染进程和多个插件进程。 so,打开一个页面,为啥有4个进程?因为打开1个页面:至少需要1个浏览器主进程,1个GPU进程,1个网络进程,1个渲染进程.