admin管理员组文章数量:1619183
前言
这个专题主要是结合对浏览器原理的学习而产出的一些笔记,作为一个职业前端,浏览器就像是我们的一个宝贝盒子一样,我们必须知道你们有些什么,以及为什么会有这些东西的存在,这样我们才能在日常的编码过程中更加游刃有余~
废话不多说,一路火花带闪电 , 我们开始啦
浏览器有哪些进程
首先我们打开任务管理器(活动监视器),来看看打开一个chrome标签页会有哪些进程吧。
从图可以看出,我只打开了一个标签页,但是后台开启了四个进程。他们分别是
-
浏览器的主进程(负责协调、主控)。负责浏览器界面显示;与用户交互,如前进,后退等;负责各个页面的管理,创建和销毁其他进程将Renderer进程得到的内存中的Bitmap,绘制到用户界面上网络资源的管理,下载等。
-
GPU进程:最多一个,用于3D绘制等。其实,Chrome 刚开始发布的时候是没有 GPU 进程的。而 GPU 的使用初衷是为了实现 3D CSS 的效果,只是随后网页、Chrome 的 UI 界面都选择采用 GPU 来绘制,这使得 GPU 成为浏览器普遍的需求。最后,Chrome 在其多进程架构上也引入了 GPU 进程。
-
. 浏览器渲染进程(浏览器内核)(内部是多线程的):核心任务是将 HTML、CSS 和 JavaScript 转换为用户可以与之交互的网页,排版引擎 Blink 和 JavaScript 引擎 V8 都是运行在该进程中,默认情况下,Chrome 会为每个 Tab 标签创建一个渲染进程,互不影响。出于安全考虑,渲染进程都是运行在沙箱模式下
-
第三方插件进程:主要是负责插件的运行,因插件易崩溃,所以需要通过插件进程来隔离,以保证插件进程崩溃不会对浏览器和页面造成影响。
为什么要用多进程
-
由于进程是相互隔离的,所以当一个页面或者插件崩溃时,影响到的仅仅是当前的页面进程或者插件进程,并不会影响到浏览器和其他页面。
-
JavaScript 也是运行在渲染进程中的,所以即使 JavaScript 阻塞了渲染进程,影响到的也只是当前的渲染页面,而并不会影响浏览器和其他页面,因为其他页面的脚本是运行在它们自己的渲染进程中的。
-
更好的安全性,每个进程的数据都是一个独立的单元,好像被锁起来了一样,chrome进程把插件和渲染进程都锁起来,这样即使插件或者页面执行了恶意代码,也无法突破限制拿到一些系统权限或数据。
多进程还是不够用
虽然多进程已经解决了大部分问题,还是比较好用的,但是还是有一定的局限性,比如:
-
更高的资源占用。因为每个进程都会包含公共基础结构的副本(如 JavaScript 运行环境),这就意味着浏览器会消耗更多的内存资源。
-
更复杂的体系架构。浏览器各模块之间耦合性高、扩展性差等问题,会导致现在的架构已经很难适应新的需求了。
为了解决这些问题,在 2016 年,Chrome 官方团队使用“面向服务的架构”(Services Oriented Architecture,简称SOA)的思想设计了新的 Chrome 架构。也就是说 Chrome 整体架构会朝向现代操作系统所采用的“面向服务的架构” 方向发展,原来的各种模块会被重构成独立的服务(Service),每个服务(Service)都可以在独立的进程中运行,访问服务(Service)必须使用定义好的接口,通过 IPC 来通信,从而构建一个更内聚、松耦合、易于维护和扩展的系统,更好实现 Chrome 简单、稳定、高速、安全的目标。
版权声明:本文标题:【参透浏览器原理】1—— 为什么明明浏览器只打开了一个页面,却出现了多个进程 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/dianzi/1728789117a1173549.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论