浏览器是多进程架构
进程与线程的区别:
以 Chrome 为例,它由多个进程组成,每个进程都有自己核心的职责,它们相互配合完成浏览器的整体功能,每个进程中又包含多个线程,一个进程内的多个线程也会协同工作,配合完成所在进程的职责。
当我们启动一个应用,计算机会创建一个进程,操作系统会为进程分配一部分内存,应用的所有状态都会保存在这块内存中,应用也许还会创建多个线程来辅助工作,这些线程可以共享这部分内存中的数据,如果应用关闭,进程会被终结,操作系统会释放相关内存。
两个进程之间可以使用 IPC (Inter Process Communication)进行通信
主进程(Browser Process)
其顶层存在一个 Browser process 用以协调浏览器的其它进程
负责包括地址栏,书签栏,前进后退按钮等部分的工作
负责处理浏览器的一些不可见的底层操作,比如网络请求和文件访问
渲染进程(Renderer Process)
html,css, javascript,转换为用户可以与之交互的网页,排版引擎Blink和javascript引擎V8运行在该进程中,每个tab标签创建一个渲染进程,渲染进程运行在沙箱模式下。
GPU进程(GPU Process)
绘制网页
网络进程
页面的网络资源加载
插件进程(Plugin Process)
负责插件的运行
多进程优点:
防一个页面崩溃影响整个浏览器
安全性和沙箱:操作系统提供了限制进程权限的方法,因此浏览器可以从某些功能中对某些进程进行沙箱处理。如任意访问文件
进程有自己的私有内存空间,可以拥有更多的内存,为了节省内存,Chrome限制了它可以启动的进程数量,限制因设备的内存和CPU功率而异,但当Chrome达到限制时,它会在一个进程中开始从同一站点运行多个选项卡
渲染进程
1.构建DOM树
HTML内容转换为浏览器dom树结构
2.样式计算
格式化样式表 标准化样式表 计算每个dom节点具体样式
3.布局阶段
布局系统确定元素位置,生成一颗布局树,渲染树
4.分层
浏览器的页面实际上被分成了很多图层,这些图层叠加后合成了最终的页面。
元素有了层叠上下文的属性或者需要被剪裁,满足其中任意一点,就会被提升成为单独一层
5、绘制
绘制图层的操作在渲染进程中有着专门的线程,这个线程叫做合成线程
6、分块
7、光栅化,栅格化,是指将图块转换为位图
8、合成