浏览器是多进程,包含那些进程
- browser进程
- GPU进程
- 插件进程
- 浏览器渲染进程(即浏览器的内核,每个Tab也就是一个进程)
browser进程作用
- 负责浏览器界面的显示,用户的交互,前进后退等
- 负责管理各个页面,创建以及销毁
- 负责网络资源的管理和下载
输入URL主进程(browser)做了什么
- 查询过程 1 主进程的UI线程判断输入的是URL还是query; 2 UI线程通知storage线程,查浏览器缓存(缓存机制) 3 不用缓存,那么发送请求,那么UI线程通知网络线程,获取网页内容,并控制tab页表示加载中 4 网络线程执行dns查询,随后建立起TSL连接
- 响应 5 当响应返回的时候,网络线程根据content-type和MIME类型判断 6 如果为HTML,那么将数据传给渲染进程 7 渲染进程开始解析渲染
渲染进程
渲染进程包含那些?
GUI线程
js引擎线程
定时器线程
异步请求线程
- 最终的图
GUI:二进制的位图
browser: 位图栈格化
GPU: 产生最终的composite交给显示器
v8引擎(Render进程)
- GUI渲染线程
- 事件处理线程
- 定时器线程(SetTimeout..)
- HTTP线程
- js引擎线程
GUI渲染线程和js引擎互斥 https://www.yuque.com/mty/here/qy3e42
- js引擎线程
即主线程,执行完就和事件线程通信
读取任务队列事件,执行
- GUI线程
• 负责页面渲染,解析 HTML CSS ,构建 DOM 树,进行布局和绘制
• 重绘和回流会执行
• GUI 线程与 JS 引擎互斥
- 事件触发线程
鼠标点击,异步请求等的回调放入的事件队列就是事件触发线程管理的事件队列
掌管者事件队列
事件任务队列分为: 宏任务队列,微任务队列
执行顺序: 宏任务(1个)--> 微任务(所有事件)
- http线程
在XMLHttpRequest在连接后是通过浏览器新开一个线程请求
将检测到状态变更(轮询)时,如果设置有回调函数,
异步线程就产生状态变更事件,将这个回调再放入事件队列中。再由JavaScript引擎执行。
管理异步请求和回调函数,异步任务有结果后,把他放进任务队列
但是下载资源还是由浏览器的下载线程执行的
- 定时器线程
setTimeout的时候,开启定时器线程,用来计时
满足条件后,把事件(回调函数)推进任务队列中
不单独开启这个线程,就会阻塞主线程