浏览器多进程架构简介
背景:
大树我在研究html解析时, 对 资源的下载(含dns查找 TSL协商 tcp握手) 和 资源的解析执行 是否是并行的? 产生了疑问。由此寻找答案
多进程架构
好处:
- 一个页面崩溃了,不会影响到页面(其他域)
- 进程间分工明确,有不同权限,会更安全高效
缺点:不同的进程间,内存不共享。所以不同进程的内存常常需要包含相同的内容
另:iframe也会有独立渲染进程
顶层存在一个Browser process,能协调其他进程
-
Browser Process:(资源的加载 此进程处理)
- 又细分了3个线程
-
UI thread : 控制浏览器上的按钮及输入框;
-
network thread: 处理网络请求,从网上获取数据;
- 如果响应的内容文件是html,下一步把这些数据传递给renderer process。如果是zip或其他,则传输给下载管理器
-
storage thread: 控制文件等的访问;
-
- 负责包括地址栏,书签栏,前进后退按钮等部分的工作;
- 负责处理浏览器的一些不可见的底层操作,比如网络请求和文件访问;
- 又细分了3个线程
-
Renderer Process:(资源的解析,执行,渲染 此进程处理)
负责一个 tab 内关于网页呈现的所有事情
线程:
- 主线程 Main thread
- 工作线程 Worker thread
- 排版线程 Compositor thread
- 合成帧
- 光栅线程 Raster thread
-
Plugin Process:
负责控制一个网页用到的所有插件,如 flash
-
GPU Process
负责处理 GPU 相关的任务
常见的浏览器线程有哪些?
- js引擎线程
- 渲染线程
- 异步http请求线程
- 定时器触发线程
- 事件触发线程
从html的解析到渲染,不同线程间怎么配合?
- 渲染线程:解析html,css,构建dom树和css规则树,合成渲染树,然后是布局和绘制
- 解析html的过程中,碰到外链,会由 异步http请求线程 去请求和下载资源(并行的)
- 碰到script标签,会阻塞渲染线程,由js引擎线程去解析js
最终结论:
资源的下载(含dns查找 TSL协商 tcp握手) 和 资源的解析执行 是2个不同的进程处理的,所以不同资源之间可以并行
整理参考:zhuanlan.zhihu.com/p/47407398
性能优化合集快速入口: