客户端容器|青训营笔记

73 阅读2分钟

浏览器对于前端开发人员的作用:

浏览器作为最重要的开发环境,是前端开发人员必须掌握的基础知识点,它贯穿着前端的整个网络体系。对浏览器原理的了解,决定着编写前端代码性能的上限。

现在浏览器结构:

用户界面(The User Interface) 浏览器引擎(The Browser Engine) 呈现引擎(The Rendering Engine) 网络(The Networking) JavaScript 解释器(The JavaScript Interpreter) 用户界面后端(The UI Backend) 数据存储(The Data Storage)

浏览器进程:

浏览器是一个多进程的架构,当我们每开一个新页面,就会开一个新的进程,所以如果一个页面崩溃也不会影响到别的页面 浏览器进程有如下几部分:主进程,第三方插件进程,GPU进程,渲染进程。 而渲染进程又包含了很多线程:js引擎线程,事件触发线程,定时器触发线程,异步http请求线程,GUI渲染线程。

主进程:

负责页面的显示与交互,各个页面的管理,创建和销毁其他进程。网络的资源管理和下载。

GPU进程:

最多有一个,3d绘制等。

插件进程:

每种类型的插件对应一个进程。

渲染进程:

称为浏览器渲染或浏览器内核,内部是多线程的;主要负责页面渲染,脚本执行,事件处

GUI渲染线程:

  1. 负责渲染浏览器界面,解析html,css,构建dom树和render树,布局和绘制。
  2. 当重绘和回流的时候就会执行这个线程
  3. GUI渲染线程和js引擎线程互斥,当js引擎执行时,GUI线程就会被挂起(相当于冻结了),GUI更新会被保存在一个队列中等到js引擎空闲时立即执行

js引擎线程:

  1. 也称js内核,负责处理js脚本程序,例如v8引擎
  2. 负责解析js脚本,运行代码
  3. 等待任务队列中的任务,一个tab页只有一个js进程
  4. 因为与GUI渲染线程互斥,所以js执行过长时间,就会造成页面渲染不连贯,导致页面渲染阻塞

事件触发线程:

  1. 归属于浏览器而不是js引擎,用了控制事件循环
  2. 当js引擎执行settimeout类似的代码块时,会将对应任务添加到事件线程
  3. 当对应的事件符合触发条件时,会被放到任务队列的队尾,等待js引擎线程处理
  4. 由于js单线程的关系,这些等待处理的事件都需要排队等待js引擎处理