前端笔记 | 青训营笔记

75 阅读2分钟

一、客户端容器

1.浏览器构架对比

Snipaste_2023-05-12_10-55-44.png 2.常见浏览器内核

Snipaste_2023-05-12_10-56-33.png 3.渲染进程(多线程构架)

内部是多线程实现,主要负责页面渲染,脚本执行,事件处理,网络请求等

  • js引擎线程: 负责解析js脚本,运行js程序,每个渲染进程下面只有一个js引擎线程。与GU|渲染线程互斥,如果js任务执行事件过长,会导致页面卡顿
  • GUI渲染线程: 负责渲染浏览器界面,解 析html、css,构建dom树和render树、布局、绘制,和js引擎线程互斥,GUI更新会在js引擎空闲时立即执行
  • 事件触发: 由宿主环境提供,用于控制事件循环,不断地从事件队列里取出任务执行
  • 网络线程: 在XHR、Fetch等发起请求后新开一个网络线程请求,如果设置了回调函数,在状态变更时,将回调放入事件队列,等待js引擎执行
  • 定时器线程: 定时器所在线程,setTimeout、setInterval计时完毕后,将回调添加到事件队列,等待js引|擎执行

4.渲染引擎、js引擎

一个完整的浏览器包含浏览器内核和浏览器的外壳(shell),内核分成两部分:渲染引擎和js引擎。由于js引擎越来越独立,内核就倾向于只指渲染引擎。

浏览器一般由七个模块组成,User Interface(用户界面)、Browser engine(浏览器引擎)、Rendering engine(渲染引擎)、Networking(网络)、JavaScript Interpreter(js解释器)、UI Backend(UI 后端)、Date Persistence(数据持久化存储)

Snipaste_2023-05-12_11-05-27.png 5.工作流程

1. 网络线程负责加载网页资源
2. JS引擎解析JS脚本并且执行
3. JS解析引擎空闲时,渲染线程立即工作
4. 用户交互、定时器操作等产生回调函数放入任务队列中
5. 事件线程进行事件循环,将队列里的任务取出交给JS引擎执行