浏览器进程的理解与研究

浏览器是每一位前端工程师都须要学习的一个模块。了解它,可让你直到咱们的js是怎么跑起来的,页面又是怎么渲染的,同时我怎么布局可让页面的性能更好,等等。所以决定静下新来好好研究一下。前端

从进程与线程开始

回顾进程与线程

什么是进程

进程是cpu资源分配的最小单位(是能拥有资源和独立运行的最小单位)浏览器

什么是线程

线程是cpu调度的最小单位(线程是创建在进程的基础上的一次程序运行单位,一个进程中能够有多个线程)安全

总结

进程能够当作是一个工厂,工厂与工厂之间相互独立,也就是说:进程之间相互独立 线程就是工厂中的工人,一个工厂里能够有好几个工人,他们相互协做,也就说,一个进程下能够有多个线程,固然也能够只有一个(工人)线程 工厂的资源也就是系统分配的内存空间markdown

浏览器是单进程仍是多进程

这个其实并没有标准的答案,只是但愿同窗们能够本身发散一下假如是你设计一个浏览器你会用单进程仍是多进程
但实际上浏览器能够是单进程,也能够是多进程。每一个厂家都有本身的实现方案,因此这并不是一个统一的标准网络

单进程多线程应用

单进程
如图所示,咱们能够建立一个主进程,而后这个进程能够分配出多个线程,多线程其实有不少好处,凭借我有限的知识我认为能够有这些好处:前端工程师

  1. 在不少场景下会提升效率,由于内存是能够共享的。
  2. 能减小内存的占用。
  3. 减小进程间的IPC通讯,挺高性能。
  • 欢迎你们留言增长....

可是实际上他的问题也不少:多线程

  1. 稳定性更高,若是进程崩溃就须要所有从新启动。
  2. 安全性不行,有些私密信息很容易被获取到。
  • 欢迎你们留言增长....

多进程应用

多进程
如图所示,咱们能够建立多个进程,而后这几个进程就能够经过互相通讯进行配合以及协调工做。
进程与进程以前是经过IPC进行通讯进程之间的通讯示意
能够有这些好处:dom

  1. 稳定性更好,一个进程崩溃不会影响到其余进程。
  2. 安全性更好,主进程的数据能够选择不让其余进程获取。
  • 欢迎你们留言增长....

可是实际上他的问题也不少:工具

  1. 若是只是单页面的话就会很是耗内存。
  • 欢迎你们留言增长....

固然,Chrome其实自己也是对这些进行了优化,他也知道多进程耗费内存,单进程下多线程效率高等,所以他们在官方文章里也说了布局

When Chrome is running on powerful hardware, it may split each service into different processes giving more stability, but if it is on a resource-constraint device, Chrome consolidates services into one process saving memory footprint.

在一些状况下,好比:UI、 Network等进程可能会被下调为主进程(Browser Process)下线程

浏览器中咱们常见的进程

Browser process(浏览器的主进程)

他主要负责协调与主控,好比咱们一些顶部的交互按钮,前进、后退、刷新等,建立和销毁其余进程,界面的展现...

Plugin process(三方插件的进程)

每个插件有独立的进程,防止某一个进程要是挂掉了,影响其余的进程工做。

Network process(三方插件的进程)

主要负责网络资源的加载等。

GPU process(三方插件的进程)

将GPU任务与其余进程隔离。由于GPU处理会来自多个进程的请求并将它们绘制在同一表面上。

Render process(渲染进程)

用于渲染页面,执行脚本,处理事件等等。

Chromium的几种进程模式

咱们以前也说Chrome在某些状况下会合并一些进程,成为单进程下的多线程,可是这是一种模式。那接下来咱们能够详细了解一下,具体有哪几种进程模式。

首先咱们科普一些概念:

  1. site 指的是相同的 registered domain name

好比 https://z.baidu.com 和 https://b.baidu.com 就能够理解为同一个 site
2. site-instance 知足下面两中状况而且打开的新页面和旧页面属于上面定义的同一个 site,就属于同一个 site-instance * 用户经过<a target="_blank">这种方式点击打开的新页面 * JavaScript code 打开的新页面(好比 window.open)

Process-per-tab(每一个 tab 使用一个进程)

这个很好理解,就是每一个tab单独一个进程,有点烧内存。

Single process(全部 tab 共用一个进程)

这个反之,全部的tab共用一个进程。

Process-per-site(同一个 site 使用一个进程)

这个你们能够这么理解,假如我点开了两个网页一个是m.wandougongzhu.com,一个是activity.wandougongzhu.com,那么这两个tab就会共用同一个进程,那咱们考虑一下,假如你在m.wandougongzhu.com里边写了一个bug,引发页面崩溃,那么实际上activity.wandougongzhu.com也会跟着崩溃,由于他俩属于一个进程。

Process-per-site-instance(同一个 site-instance 使用一个进程)--> 默认模式

这个你们能够这么理解,假如我点开了两个网页一个是m.wandougongzhu.com,一个是activity.wandougongzhu.com,那么这两个tab就会启动两个进程,可是,假如在m.wandougongzhu.com里边经过a标签或者location.href打开了activity.wandougongzhu.com那么他俩属于一个进程。

里程碑的iframe

这里有一个比较有意思的是咱们经常使用的iframe从Chrome 67开始,由于默认启用Site Isolution机制,就会变成一个单独的进程,这个改动按照Chrome官方的说法是里程碑式的,由于这个独立出去进程,和以往不断叠加进程不一样,他的改动会牵扯到咱们的调试进程,也就是咱们经常使用的调试工具,等等。

相关文章
相关标签/搜索