浏览器的渲染进程,包含5个线程
1 、GUI 渲染线程
负责浏览器页面渲染,解析html,css,构建Dom树,构建css树,页面绘制;
与JS引擎进程互斥;
2、JS 引擎线程
负责解析js脚本,运行代码,每一个tab页只有一个js引擎线程执行js。如果js线程执行时间过长,会造成页面渲染不连贯,阻塞页面渲染
3、事件触发线程
用来控制事件循环,当js执行setTimeout代码片段等(也可是来自浏览器内核的其他线程,如鼠标点击、AJAX异步请求等),会将对应任务放入事件触发线程中,当对应的事件符合触发条件时,该线程会把对应事件放到待处理队列,等待js引擎空闲时处理
4、定时器 触发线程 ,即setTimeout, setInterval计时器
浏览器计数并不是js引擎来完成,因为js是单线程的,如果来完成计数,不能保证计数的准确性,所以由专门 定时器线程来进行计数,并触发定时器,计时完毕后,添加到事件队列中,等待js引擎空闲时执行。
所以定时器的任务在设定的时间点并不一定准时执行,定时器只是在指定的时间点把任务添加到事件队列。
5、异步 http请求线程
XMLHttpRequest 连接后通过浏览器新开一个 http请求线程,当检测到状态变更时,如果设置有回调函数,异常线程就产生状态变更事件,把回调函数添加到事件队列中,等待js引擎空闲时执行
网友评论