chrome架构发展与提供的性能分析工具


chrome发展

  • 进程与线程角度了解浏览器与操作系统发展的关联

    • 进程:进程是资源分配最小单位,每个进程都有独立的代码和数据空间(进程上下文),因此进程之间切换有较大的开销,一个进程包含1-n个线程;通常说的多进程即操作系统能够同时运行多个任务或说程序
    • 线程:线程是CPU调度的最小单位,同一类线程共享代码和数据空间,每个线程有独立的运行栈和程序计数器(pc),线程切换的开销小;多线程通常指同一个程序中有多个顺序流在执行
  • 浏览器看成是一个“便携式操作系统”,chrome浏览器的发展历史与操作系统类似,chrome自发布之初至今,大致经历如下阶段

    • 单进程浏览器

      早期单进程浏览器时代,chrome所有功能都运行在同一个进程里,在单个进程中管理多个线程,有专门处理页面渲染、展示、js、插件等页面线程,也有网络线程等其它线程。

    • 多进程浏览器,相比早起单进程时期的浏览器同一时间仅能处理单一进程的性能阻碍,多进程架构优势不言而喻

      • 谷歌早期多进程架构分为插件进程(Plugin Process)、渲染进程(Render Process)、浏览器主进程(Browser Process)

        插件进程负责插件的运行,通过插件进程隔离,避免插件崩溃对浏览器和页面造成影响

        渲染进程主要负责解析、渲染、js执行、合成网页图片,运行在沙箱中,不能读写硬盘资源、不能获取操作系统权限等

        浏览器主进程则负责下载资源、管理IPC(进程间通信)、显示渲染过程生成的图片等

      • 目前的谷歌浏览器架构中,在浏览器主进程中又分出来网络进程(NetWork Process)、GPU进程(GPU Process)

        网络进程主要负责页面网络资源加载

        GPU进程目前用来绘制UI界面,前端性能分析中这是一个重要衡量指标

    • 面向服务的架构

      • 通过多进程与多线程的架构优化,chrome对于系统资源资分配,CPU调度处理,使得处理任务与速度有了极大提升,

        虽然支持多进程,但进程资源占用高,比如每个进程都会包含公共基础结构的副本如javaScript运行环境,

        复杂的体系架构,浏览器各个模块之间耦合性高、拓展性差,谷歌浏览器16年便提出来面向服务的架构

      • 解决办法

        面向服务的架构就是为了解决这个问题而诞生的,除了主要的渲染进程、插件进程、浏览器主进程外,解耦更多的公共模块服务,使得这些服务可以在单独的进程中运行,每个进程可以通过调用服务而非占用系统资源,很适合较为多进程任务的情况下使用,也是性能的一大优化点。
        把UI、数据库、文件、设备、网络等模块重构为基础服务,那么浏览器真正意义上如同一台操作系统,拥有自己的底层服务,性能将会极大提升。当然,在一些资源等内存受限的系统中,相当于开坦克轰蚊子没有必要了。

相关性能工具

  • 大致先了解浏览器目前的架构,如下为谷歌浏览器所自带的性能分析工具

    类似于电脑的任务管理器,chrome也有一个任务管理器可供使用

  • F12跳出Dev-Tools,除了常用观察NetWork、console等,还有非常便捷的观察浏览器内存Memory、性能Performance的进程工具,如下: