关于javascript:浏览器原理剖析Chrome架构一个页面为何有四个进程

10次阅读

共计 1328 个字符,预计需要花费 4 分钟才能阅读完成。

目录:1、问题背景
2、过程和线程
3、多过程浏览器架构
4、将来面向服务的架构


1、问题背景:当咱们关上一个 Chrome 浏览器页面,能够通过更多工具——工作管理器查看以后浏览器启动的过程。这时会发现一个乏味的景象,那就是只关上一个标签页,浏览器却有四个过程在执行中,这是为什么呢?


2、过程和线程

 在进行深刻学习之前,咱们得梳理一下过程和线程的概念和关系

1)一个过程就是一个程序的运行实例
2)线程依附于过程存在,须要过程来启动和治理,应用多线程并行处理能晋升运算效率
3)过程中的任一线程出错,都会导致整个过程的解体
4)过程之间内容互相隔离,然而过程外部的线程之间共享以后过程的数据
5)当一个过程敞开之后,操作系统会回收过程所占用内存

3、多过程浏览器架构

目前次要的两种浏览器架构为单过程浏览器架构和多过程浏览器架构

单过程浏览器是指浏览器的所有功能模块都是运行在同一个过程里,这些模块蕴含了网络、插件、JavaScript 运行环境、渲染引擎和页面等。如此多的模块集中到一个过程,导致其有致命的三个缺点:

1)不稳固:晚期浏览器须要插件实现 Web 视频、Web 游戏等弱小的性能,然而插件非常不稳固,一旦插件出错就会导致整个浏览器解体;2)不晦涩:每次只能有一个模块执行,如果一个循环脚本占据了线程,其余如渲染过程就会被阻塞,导致浏览器无响应,变卡顿;3)不平安:通过更改插件的代码能够获取操作系统的任意资源

晚期的多过程浏览器将过程分为了三种过程,过程之间互相隔离

浏览器主过程:负责下载过程、治理过程间通信等
渲染过程:负责解析、渲染和 JS 代码的执行等
插件过程:独自执行各种插件性能


通过多过程机制,如何解决上述的几个问题:

不稳固问题:因为过程互相隔离,单个页面或单个过程的解体并不会影响其余页面 / 其余过程
不晦涩问题:每个页面有独自的渲染过程,不会相互影响和阻塞
不平安:多过程架构引入了 ** 平安沙箱 ** 的机制,相当于操作系统给过程上了一把锁,过程能够运行,但不能在硬盘上写数据,也不能读取敏感数据

目前的多过程架构,对过程进行进一步的划分,分为几种过程:

浏览器过程:负责界面显示、用户交互等
渲染过程:外围工作是将 HTML、CSS 和 JS 渲染成能够用户交互的网页
GPU 过程:实现 CSS 动画绘制、GPU 减速等性能
网络过程:负责页面的网络资源加载
插件过程:负责插件的运行,须要插件过程隔离,以防插件解体

尽管解决了之前的问题,但目前的浏览器架构也产生了其余问题:

1)更高资源占用:过程多了对应占用的内存资源也多了
2)更简单体系结构:各过程模块互相独立,导致架构拓展性差,难以适应新需要

由此能够答复最后的问题,为何一个标签页能启动四个过程?答:是因为目前浏览器采纳了多过程的架构,而目前的多个过程分类显明且互相隔离

4、将来面向服务的架构

将来 Chrome 整体架构会朝向古代操作系统所采纳的“面向服务的架构”方向倒退,原来的各种模块会被重形成独立的服务(Service),每个服务(Service)都能够在独立的过程中运行,拜访服务(Service)必须应用定义好的接口,通过 IPC 来通信,从而构建一个 更内聚、松耦合、易于保护和扩大 的零碎。
目前这还在开发中的阶段,也是咱们前端后续须要跟进学习的方向。

正文完
 0