浏览器是多进程的,每打开一个 tab 页,就相当于创建了一个独立的浏览器进程。
注:浏览器应该也有自己的优化机制,有时候打开多个 tab 页,在 Chrome 任务管理器中会看到有些进程被合并了,所以每个 tab页对应一个进程并不一定是绝对的。
浏览器的进程(主要部分):
-
Browser 进程:浏览器的主进程,只有一个。
负责浏览器界面的显示与交互;
各个页面的管理,创建和销毁其他进程;
网络的资源管理、下载等。 -
Renderer 进程:也称为浏览器渲染进程或浏览器内核,内部是多线程的。主要负责页面渲染,脚本执行,事件处理等。
-
第三方插件进程:每种类型的插件对应一个进程,仅当使用该插件时才创建。
-
GPU 进程:最多一个,用于 3D 绘制等。
前端重点关注:浏览器的渲染进程是多线程的,页面的渲染,JS的执行,事件的循环等,都在这个进程内执行。
渲染进程通常有以下线程组成:
1. GUI 渲染线程
负责渲染浏览器界面,解析 HTML、CSS,构建 DOM tree和 render tree,布局和绘制等。当界面需要重绘(repaint)或由于某种操作