浏览器渲染进程的线程主要包括以下几种:
-
GUI渲染线程:
- 负责渲染浏览器页面,包括解析HTML、CSS,构建DOM树、CSSOM树,以及构建渲染树和绘制页面。
- 当界面需要重绘或由于某种操作引发回流时,该线程会执行。
- GUI渲染线程和JS引擎线程是互斥的,当JS引擎执行时,GUI线程会被挂起,等待JS引擎空闲时再继续执行。
-
JS引擎线程:
- 也称为JS内核,负责处理和执行JavaScript脚本程序。
- JS引擎线程一直等待着任务队列中的任务,然后加以处理。在一个标签页中,无论何时都只有一个JS引擎线程在运行JS程序。
- 由于GUI渲染线程与JS引擎线程的互斥关系,如果JS执行时间过长,会造成页面渲染不连贯,甚至导致页面渲染加载阻塞。
-
事件触发线程:
- 属于浏览器而不是JS引擎,负责处理JavaScript代码中的事件,用来控制事件循环。
- 当JS引擎执行代码块如setTimeOut时,或者发生其他事件如鼠标点击、AJAX异步请求等,会将对应任务添加到事件触发线程中。
- 当事件符合触发条件被触发时,该线程会把事件添加到待处理队列的队尾,等待JS引擎的处理。
-
定时器触发线程:
- 即setInterval与setTimeout所在线程。
- 由于JavaScript引擎是单线程的,为了准确计时,浏览器使用单独线程来计时并触发定时器。
- 计时完毕后,会将定时器的处理函数添加到事件队列中,等待JS引擎线程空闲后执行。
- W3C在HTML标准中规定,定时器的定时时间不能小于4ms,如果小于4ms,则默认为4ms。
-
异步HTTP请求线程:
- 当XMLHttpRequest连接后,浏览器会新开的一个线程。
- 当检测到状态变更时,如果设置有回调函数,异步线程就会将回调函数放入事件队列中,等待JS引擎空闲后执行。
这些线程共同协作,完成了浏览器的渲染任务。在开发过程中,了解这些线程的工作原理和相互关系,有助于优化页面性能和提升用户体验。

610

被折叠的 条评论
为什么被折叠?



