浏览器内核
2020-09-23 本文已影响0人
bestCindy
首先要知道,浏览器内核,就是渲染进程
然后要明确,浏览器的渲染进程是多线程的
对于前端开发人员来说,常接触到的,也是这个渲染进程
一些常驻线程
GUI 渲染线程
- 负责渲染界面,解析 HTML,CSS, 构建 DOM tree 和 Render tree
- 当页面需要重绘(Repaint)或者回流(Reflow)的时候,该线程会执行
- GUI 渲染线程会和 JS 引擎线程互斥
- 当 JS 引擎执行时 GUI 线程会被挂起,GUI 更新会被保存在一个队列中等到 JS 引擎空闲时立即被执行
- 所以,当 JS 执行时间很长,会导致页面渲染加载阻塞,也就是所谓的 JS 执行阻塞页面更新
JS 引擎线程
- 也称为 JS 内核,负责处理 JavaScript 脚本程序的执行(例如 V8 引擎)
- 一个 Tab 页(render 进程)中无论什么时候只有一个 JS 线程在运行 JS 程序。也就是我们经常说的,JS 是单线程的
事件触发线程
- 这是控制事件循环的
- 当 JS 引擎执行代码块,比如
setTimeout
时,或者来自浏览器内核的其他线程,如鼠标点击,AJAX 异步请求等,会将对应任务添加到事件线程中 - 当对应的事件符合触发条件被触发时,该线程会把事件添加到事件队列的队尾,等待 JS 引擎处理
定时触发线程
-
setInterval
和setTimeout
所在的线程 - 该线程负责计数