[ 前端与客户端容器 -1 | 青训营笔记 ]

82 阅读2分钟

客户端容器学习-01

image-20230421145532319.png 五个渲染进程分别是:

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

JS引擎 VS 渲染引擎

image-20230421145704654.png 1. **解析执行JS**: > 什么是AST呢?[看这里 ](https://www.jianshu.com/p/d37d540ea0d9)

JS源码编译成抽象语法树(是一种JSON数据结构),翻译为字节码经过JIT交由操作系统直接执行。 2. XML解析生成渲染树,显示在屏幕
xml解析HTML源码为DOM树,css解析将CSS源码解析为CSSOM树。DOM树和CSSOM树合成为render树,交由显存渲染。 3. 桥接方式通信

渲染进程-多线程工作流程

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

-----end-----