【参透浏览器原理】1—— 为什么明明浏览器只打开了一个页面,却出现了多个进程

前言

这个专题主要是结合对浏览器原理的学习而产出的一些笔记,作为一个职业前端,浏览器就像是我们的一个宝贝盒子一样,我们必须知道你们有些什么,以及为什么会有这些东西的存在,这样我们才能在日常的编码过程中更加游刃有余~
废话不多说,一路火花带闪电 , 我们开始啦

 
 
 

浏览器有哪些进程

首先我们打开任务管理器(活动监视器),来看看打开一个chrome标签页会有哪些进程吧。
在这里插入图片描述
从图可以看出,我只打开了一个标签页,但是后台开启了四个进程。他们分别是

  1. 浏览器的主进程(负责协调、主控)。负责浏览器界面显示;与用户交互,如前进,后退等;负责各个页面的管理,创建和销毁其他进程将Renderer进程得到的内存中的Bitmap,绘制到用户界面上网络资源的管理,下载等。

  2. GPU进程:最多一个,用于3D绘制等。其实,Chrome 刚开始发布的时候是没有 GPU 进程的。而 GPU 的使用初衷是为了实现 3D CSS 的效果,只是随后网页、Chrome 的 UI 界面都选择采用 GPU 来绘制,这使得 GPU 成为浏览器普遍的需求。最后,Chrome 在其多进程架构上也引入了 GPU 进程。

  3. . 浏览器渲染进程(浏览器内核)(内部是多线程的):核心任务是将 HTML、CSS 和 JavaScript 转换为用户可以与之交互的网页,排版引擎 Blink 和 JavaScript 引擎 V8 都是运行在该进程中,默认情况下,Chrome 会为每个 Tab 标签创建一个渲染进程,互不影响。出于安全考虑,渲染进程都是运行在沙箱模式下

  4. 第三方插件进程:主要是负责插件的运行,因插件易崩溃,所以需要通过插件进程来隔离,以保证插件进程崩溃不会对浏览器和页面造成影响。
     
     
     

为什么要用多进程

  • 由于进程是相互隔离的,所以当一个页面或者插件崩溃时,影响到的仅仅是当前的页面进程或者插件进程,并不会影响到浏览器和其他页面。

  • JavaScript 也是运行在渲染进程中的,所以即使 JavaScript 阻塞了渲染进程,影响到的也只是当前的渲染页面,而并不会影响浏览器和其他页面,因为其他页面的脚本是运行在它们自己的渲染进程中的。

  • 更好的安全性,每个进程的数据都是一个独立的单元,好像被锁起来了一样,chrome进程把插件和渲染进程都锁起来,这样即使插件或者页面执行了恶意代码,也无法突破限制拿到一些系统权限或数据。

多进程还是不够用

虽然多进程已经解决了大部分问题,还是比较好用的,但是还是有一定的局限性,比如:

  1. 更高的资源占用。因为每个进程都会包含公共基础结构的副本(如 JavaScript 运行环境),这就意味着浏览器会消耗更多的内存资源。

  2. 更复杂的体系架构。浏览器各模块之间耦合性高、扩展性差等问题,会导致现在的架构已经很难适应新的需求了。

为了解决这些问题,在 2016 年,Chrome 官方团队使用“面向服务的架构”(Services Oriented Architecture,简称SOA)的思想设计了新的 Chrome 架构。也就是说 Chrome 整体架构会朝向现代操作系统所采用的“面向服务的架构” 方向发展,原来的各种模块会被重构成独立的服务(Service),每个服务(Service)都可以在独立的进程中运行,访问服务(Service)必须使用定义好的接口,通过 IPC 来通信,从而构建一个更内聚、松耦合、易于维护和扩展的系统,更好实现 Chrome 简单、稳定、高速、安全的目标。
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值