IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> 浏览器原理:1.宏观视角上的浏览器 -> 正文阅读

[JavaScript知识库]浏览器原理:1.宏观视角上的浏览器

宏观视角上的浏览器


Chrome架构

右击chrome,可以发现chrome也有任务管理器
chrome任务管理器
当使用Chrome只打开了一个页面,可以发现有多个进程在执行 !

这就要从操作系统的角度来看浏览器,也就是宏观视角。

首先介绍一点简单的操作系统知识

进程和线程

  • 并行处理

    即计算机同一时刻处理多个任务,与之相对的还有并发处理,两者的区别在于是否在同一时刻处理多个任务

  • 线程和进程

    多线程可以并行处理,但是线程是不能单独存在的,它是由进程来启动和管理的

    • 进程 即一个程序的运行实例

      启动一个程序的时候,操作系统会为该程序创建一块内存,用来存放代码、运行中的数据和一个执行任务的主线程,这样的一个运行环境叫做进程。

    进程和线程的关系

    • 进程中的任意一线程执行错误,都会导致整个进程的崩溃
    • 线程之间共享进程中的数据
    • 当一个进程关闭后,操作系统会回收进程所占用的内存
    • 进程之间的内容即进程与进程之间相互隔离

介绍完了,操作系统的基本知识,接下来简单介绍一下浏览器的发展历史

单进程浏览器时代

  • 浏览器的所有功能模块都运行在同一个进程里,这些模块里包含了网络、插件、JS运行环境、渲染引擎和页面等。该进程运行了三个线程,页面线程,网络线程和其他页面,页面渲染和渲染引擎以及JS运行环境都运行在页面线程当中。

    但这样全都运行在一个进程内,会导致单进程浏览器不稳定、不流畅、不安全

    • 不稳定

      插件、渲染引擎模块是最容易出现问题的模块

      一个插件、或者渲染引擎的意外崩溃会引起整个浏览器的崩溃,任一线程的错误都会引起整个进程的崩溃

    • 不流畅

      在上面的单进程浏览器架构中,所有的页面渲染模块、js执行环境以及插件都是运行在一个线程中,意思是同一时刻这三个模块只能有一个可以执行

      内存泄漏的问题,因为是单进程,所以导致任一线程中发生的内存泄漏最终会影响到全体线程

    • 不安全

      插件与页面脚本

      插件可以使用C/C++等代码来编写,通过插件可以获取到操作系统的任意资源,会引发一些安全问题

      页面脚本可以通过浏览器的漏洞来获取操作系统权限

多进程浏览器时代

  • 早期多进程架构

    Chrome在2008年发布了自己的浏览器架构设计,Chrome有三个进程,浏览器主进程,插件进程,渲染进程。
    浏览器主进程主要负责下载资源,管理IPC(进程之间的通信机制),显示渲染进程生成的图片。
    插件进程主要负责扩展程序的执行
    渲染进程主要负责解析HTML\CSS,渲染,执行JS,合成网页图片

    ? 页面运行在单独的渲染进程中,插件也是运行在单独的插件进程中,进程之间通过IPC机制进行通信

    ? 这样的架构是怎样解决了单进程架构的问题

    • 不稳定

      进程之间互相隔离,一个进程内的某个线程崩溃不会影响另外的进程

    • 不流畅

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

      内存泄漏,因为当一个页面,整个渲染进程也会被关闭,之后该进程所占用的内存都会被系统回收

    • 不安全

      采用多进程架构的额外好处是可以是使用安全沙箱,即操作系统给该进程上了一把锁,沙箱里面的程序可以运行,但是没有读写的权限。Chrome把插件进程和渲染进程都锁在了沙箱里面!所以恶意程序无法突破沙箱获取权限。

目前多进程架构

? 包括 1个浏览器主线程,1个GPU进程,1个网络进程,多个渲染进程,多个插件进程,即增加了GPU进程和网络进程

  • 浏览器进程

    主要负责界面现实、用户交互、子进程管理,同时提供存储等功能

  • 渲染进程

    核心任务是将HTML、CSS和JS转换为用户可以为止交互的网页,排版引擎 Blink 和 JS引擎V8都是运行在该进程中,默认情况下,Chrome会为每个Tab标签创建一个渲染进程。渲染进程都是运行在沙箱模式下。

  • GPU进程

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

  • 网络进程

    主要负责页面的网络资源加载,之前是作为一个模块运行在浏览器进程里面的,直至最近才独立出来,成为一个单独的进程。

  • 插件进程

    主要负责插件的运行,因插件易崩溃,所以需要通过插件进程来隔离

多进程架构的缺点

  • 更高的资源占用

    因为每个进程都会包含公共基础结构的副本(如JS运行环境)

  • 更复杂的体系结构

    浏览器各模块之间耦合性较高,扩展性差等问题,会导致现在的架构已经很难适应新的需求

未来面向服务的架构

Chrome正在逐步构建Chrome基础服务,如果认为Chrome是便携式操作系统,那么Chrome基础服务便可以被视为该操作系统的基础系统服务层

同时Chrome还提供灵活的弹性架构,在强大性能设备上会以多进程的方式运行基础服务,但是如果在资源的设备上,Chrome会将很多服务整合到一个进程中,从而节省内存占用

操作系统,那么Chrome基础服务便可以被视为该操作系统的基础系统服务层

同时Chrome还提供灵活的弹性架构,在强大性能设备上会以多进程的方式运行基础服务,但是如果在资源有限的设备上,Chrome会将很多服务整合到一个进程中,从而节省内存占用。

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-02-22 20:29:58  更:2022-02-22 20:31:05 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 10:30:05-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码