渲染进程通常被称为浏览器内核,主要负责页面渲染、脚本执行和事件处理等任务。每个浏览器标签页都对应一个独立的渲染进程。
线程组成
GUI 渲染线程、JS 引擎线程、事件触发线程、定时器线程、异步 HTTP 请求线程
此外,渲染进程内部还包含:
主线程、工作线程、合成线程、光栅线程
各线程功能详解
- GUI 渲染线程
- 负责浏览器界面的渲染工作
- 解析HTML和CSS,构建DOM树和RenderObject树
- 执行页面布局和绘制操作
- 在页面需要重绘或发生回流时启动执行
- 与JS引擎线程互斥:当JS引擎执行时,GUI线程会被挂起,所有GUI更新任务会进入队列等待JS引擎空闲时执行
- JS引擎线程
- 作为 JavaScript 脚本的处理核心(如 V8 引擎)
- 负责解析和执行 JavaScript 代码
- 采用单线程运行模式
- 与 GUI 渲染线程互斥,确保渲染结果的确定性
- 事件触发线程
- 控制浏览器事件循环机制(处理鼠标事件、setTimeout、Ajax 等)
- 在事件触发条件满足时,将事件添加到 JS 引擎的执行队列中
- 由浏览器直接管理,独立于 JS 引擎
- 定时触发器线程
- 专门处理 setTimeout 和 setInterval 定时任务
- 负责定时功能的计时工作(非 JS 引擎计时)
- 计时结束后通知事件触发线程
- 异步 HTTP 请求线程
- 浏览器专门处理 AJAX 请求的独立线程
- 请求完成后,若有回调函数则通知事件触发线程
GUI 渲染线程与 JS 引擎线程互斥的原因
这种互斥机制主要是由于 JavaScript 具有操作 DOM 的能力。如果允许 JS 线程和 UI 线程同步运行,可能会在渲染过程中同时发生元素属性修改,导致渲染线程前后获取的元素状态不一致,从而引发渲染结果异常。
哦对了,我最近开发了一个叫
牛马工作器的chrome拓展插件,很好玩哦,感兴趣的话,给我的公众号回复牛马即可免费获取。
 
                     
                     
                        
                        