我的回答

  1. 浏览器主进程
  2. 网络进程
  3. 渲染进程
  4. GPU进程
  5. 插件进程

渲染进程中的线程

  1. dom解析
  2. css解析
  3. layout布局
  4. layer分层
  5. gpu通信
  6. qurd render

参考回答

浏览器组成

    1. 早期浏览器是单进程结构,由于单进程会导致卡死,容易奔溃等原因。现在浏览器就有了多进程架构,将来会是面向服务架构的。
    1. 基本的多进程架构进程有:浏览器主进程、渲染进程、GPU进程、网络进程、其它插件进程等等
    1. 每个页面或者同站点将分配一个渲染进程。渲染进程是由多个线程相互协同。
    1. 渲染进程组成:渲染主线程、js引擎线程、io线程、定时器线程、事件触发线程等等

      浏览器进程

    1. 浏览器主进程

负责包括地址栏、书签栏、前进后退按钮等部分的工作

    1. 渲染进程

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

    1. GPU进程

负责处理GPU相关的任务

    1. 网络进程

负责处理浏览器的一些不可见的底层操作,比如网络请求和文件访问

    1. 其他插件进程

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

渲染进程中都有什么线程?

    1. GUI渲染线程
      • 负责渲染浏览器界面、解析HTML、CSS、构建DOM树和RenderObeject树、布局和绘制等
      • 当界面需要重绘或由于某种操作引发回流时,该线程就会执行
      • 注意:GUI渲染线程和JS引擎线程是互斥的,JS引擎线优先级高于GUI渲染线程,当JS引擎执行时GUI线程会被挂起,GUI更新会保存在一个队列中等到JS引擎空闲时间立即被执行
    1. JS引擎线程
      • 也称之为JS内核,负责处理和解析JavaScript脚本程序,运行代码,如V8引擎等;
      • JS引擎一直等待这任务队列中的任务,然后加以处理,render进程中永远只有一个JS线程在运行js程序
      • 同样注意:GUI渲染线程和JS引擎线程是互斥的,JS执行时间过长,就会造成页面的渲染不连贯,导致页面渲染加载阻塞
    1. 事件触发线程
      • 归属于浏览器而不是JS引擎,用来控制事件循环;
      • 当JS引擎执行代码块如:setTimeout、鼠标点击、Ajax异步请求、会将对应的任务添加到事件线程中
      • 当对应的事件服务触发条件时,该线程会把事件添加到待处理队列的队尾,等到JS引擎来处理
    1. 定时处理线程
      • setInterval与setTimeout所在的线程;
      • 浏览器定时计数器并不是由JavaScript引擎计数的,它是通过单独线程来计时并触发定时;
      • 注意:W3C在HTML标准中规定,要求setTimeout中低于4ms的时间间隔算为4ms
    1. 异步http请求线程
      • 在XMLHttpRequest在连接后通过浏览器新开的一个线程请求
      • 将检测到状态变更时,如果设置有回调函数,异步线程就会产生状态变更事件,将这个回调在放入事件队列中,再由JavaScript引擎执行