浏览器多进程架构简介

·  阅读 448
浏览器多进程架构简介

浏览器多进程架构简介

背景:

大树我在研究html解析时, 对 资源的下载(含dns查找 TSL协商 tcp握手)资源的解析执行 是否是并行的? 产生了疑问。由此寻找答案

多进程架构

好处:

  1. 一个页面崩溃了,不会影响到页面(其他域)
  2. 进程间分工明确,有不同权限,会更安全高效

缺点:不同的进程间,内存不共享。所以不同进程的内存常常需要包含相同的内容

另:iframe也会有独立渲染进程

顶层存在一个Browser process,能协调其他进程

browser process.png

  1. Browser Process:(资源的加载 此进程处理)

    1. 又细分了3个线程
      1. UI thread : 控制浏览器上的按钮及输入框;

      2. network thread: 处理网络请求,从网上获取数据;

        1. 如果响应的内容文件是html,下一步把这些数据传递给renderer process。如果是zip或其他,则传输给下载管理器
      3. storage thread: 控制文件等的访问;

    • 负责包括地址栏,书签栏,前进后退按钮等部分的工作;
    • 负责处理浏览器的一些不可见的底层操作,比如网络请求和文件访问;
  2. Renderer Process:(资源的解析,执行,渲染 此进程处理)

    负责一个 tab 内关于网页呈现的所有事情

    线程:

    1. 主线程 Main thread
    2. 工作线程 Worker thread
    3. 排版线程 Compositor thread
      1. 合成帧
    4. 光栅线程 Raster thread
  3. Plugin Process:

    负责控制一个网页用到的所有插件,如 flash

  4. GPU Process

    负责处理 GPU 相关的任务

process worker.png

常见的浏览器线程有哪些?

  1. js引擎线程
  2. 渲染线程
  3. 异步http请求线程
  4. 定时器触发线程
  5. 事件触发线程

从html的解析到渲染,不同线程间怎么配合?

  1. 渲染线程:解析html,css,构建dom树和css规则树,合成渲染树,然后是布局和绘制
  2. 解析html的过程中,碰到外链,会由 异步http请求线程 去请求和下载资源(并行的)
  3. 碰到script标签,会阻塞渲染线程,由js引擎线程去解析js

最终结论:

资源的下载(含dns查找 TSL协商 tcp握手)资源的解析执行 是2个不同的进程处理的,所以不同资源之间可以并行


整理参考:zhuanlan.zhihu.com/p/47407398


性能优化合集快速入口:

分类:
前端
标签:
收藏成功!
已添加到「」, 点击更改