以 chromium架构为例

# 一、浏览器架构

# 解释
嵌入式接口
嵌入式接口是提供给浏览器调用的。负责浏览器ui与webkit交互的部分
web core
解析html css 的渲染引擎
js core
js引擎
webkit ports
Webkit中的非共享部分 。不共享称为移植。,
# 过程
从地址栏输入url到呈现的全过程?
1.dns解析 (递归、迭代)
2.tcp连接
3.请求 html(字节流)(字符流)
4 .解析html
parser(词法解析语法解析)---> 解析树 ---> dom 树
css parser ---> css om(规则树)
合成layoutTree ---》 虚拟绘图上下文 ---> 生成图像

# 二、多进程和多线程模型
# 2.1 多进程
# 好处:
A.标签页崩溃,不会影响到其他进程
B.第三方插件崩溃,不会影响系统稳定性
C.沙箱模型 (webkit2产生的原因)
# 坏处:
需要多使用资源
# 进程的类型
Bowser进程:浏览器主进程,负责主页面展示,管理 (有且只有一个)
Render进程,网页的渲染进程,负责网页的渲染,webkit的渲染工作在此完成。Render进程和网页的数量不是一一对应的。(用户配置有关)
NPAPI插件进程:
GPU进程: 最多一个。仅当GPU硬件加速打开时创建。
paper插件进程
# 用户配置Render进程
- 同一个网站打开的其他网站属于同一个进程(默认)
- Process-per-site:同一个域的页面分配一个进程。
- Process-per-tab :每个网站分配一个进程
- 把进程变为 browser下的线程
# 2.2 多线程
进程内部存在多个线程。为了保证高响应度。ui在处理阻塞时,其它线程并行执行其他任务。

# 网页加载和渲染处理过程:
1.browser收到用户的请求,首先由ui线程处理,将相应任务转给io线程,它随即将任务交给Render进程
2.Render进程的io线程解释后交给 渲染线程 ,其中可能需要Browser进程获取资源和 GPU进程帮忙渲染,最后Render进程 将结果 通过io线程传递给Browser进程
3.最后,Browser接收结果后绘制。
# 三、浏览器内核
我们说的浏览器内核,一般指的是渲染引擎,比如Ie的trident,firefox的gecko,chrome的blink
主要包括几部分
# 3.1 浏览器GUI渲染线程
html parser
css parser
SVG
DOM
layout过程
painting
资源解析器
# chromium浏览器的架构

Content模块:渲染网页内容,无此 浏览器开发者无法获得最底层的模块功能
Content接口:对多进程,底层模块封装,直接对上层提供使用
Content模块和Content接口 将底层模块隐藏,对外间接暴露接口