浏览器复习-架构

2021-05-24 04:58:322021-05-24 22:02:57

浏览器是多进程的

浏览器主要包含以下进程:

  • browser进程,浏览器的主进程,负责协调各进程;有且只有一个
    • 负责浏览器界面的显示,与用户交互(前进/后退等)
    • 负责各个页面的管理,创建和销毁其他进程
    • render进程得到的内存中的位图绘制到用户界面上
    • 网络资源的下载与管理等
  • 第三方插件进程,每种类型的插件对应一个进程,仅当使用该插件时创建
  • GUI进程,最多只有一个,用户3D图形的绘制
  • render进程(浏览器内核),默认为一个tab页一个进程,互不影响
    • 页面渲染,脚本执行,事件处理等

浏览器使用多线程的优势

  • 避免单个page crash后影响到整个浏览器
  • 避免第三方插件crash后影响到整个浏览器
  • 多进程充分利用多核cpu优势

浏览器内核(render进程)

浏览器核心,页面渲染、JavaScript执行等都在这个进程内执行,主要包含以下线程:

  • 渲染线程 负责渲染页面。解析html构建dom树,解析css构建cssom树,合并成为render树,布局,绘制,合成等。与JavaScript引擎互斥
  • JavaScript引擎线程 负责解释执行事件循环队列中的JavaScript代码。与渲染线程互斥
  • 事件触发线程 专注于处理event-loop
  • 定时器触发线程 setTimeoutsetInteval
  • 异步http请求线程 发送http请求

一些问题

  • 渲染线程与JavaScript引擎线程互斥?

    为了防止在渲染线程工作时JavaScript修改DOM造成显示出错的问题

  • CSS加载不会阻塞DOM树构建,会阻塞render树构建

参考

从浏览器多进程到JS单线程,JS运行机制最全面的一次梳理