浏览器原理

104 阅读3分钟

浏览器是多进程架构

进程与线程的区别:

以 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、合成