客户端容器学习-01
五个渲染进程分别是:
- JS引擎:
解析js脚本,运行js程序,每个渲染进程下面只有一个js引擎线程,与GUI渲染线程互斥,如果js任务执行时间过长,会导致页面卡顿 - GUI渲染:
负责渲染浏览器界面,解析html、css,构建dom树和render树、布局、绘制,和js引擎线程互斥,GUI更新会在js引擎空闲时立即执行 - 定时器触发:
定时器所在线程,setTimeout、setInterval计时完毕后,将回调添加到事件队列,等待js引擎执行 - 网络线程:
在XHR、Fetch等发起请求新开一个网络线程请求,如果设置了回调函数,在状态变更时,将回调放入事件队列,等待js引擎执行 - 事件触发:
由宿主环境提供,用于控制事件循环,不断地从事件队列里取出任意任务执行。
JS引擎 VS 渲染引擎
JS源码编译成抽象语法树(是一种JSON数据结构),翻译为字节码经过JIT交由操作系统直接执行。
2. XML解析生成渲染树,显示在屏幕:
xml解析HTML源码为DOM树,css解析将CSS源码解析为CSSOM树。DOM树和CSSOM树合成为render树,交由显存渲染。
3. 桥接方式通信:
渲染进程-多线程工作流程
- 网络线程负责加载网页资源
- JS引擎解析JS脚本并且执行
- JS解析引擎空闲时,渲染线程立即工作
- 用户交互、定时器操作等产生回调函数放入任务队列中
- 事件线程进行事件循环,将队列里的任务取出交给JS引擎执行
-----end-----