当我们打开某个页面会电脑会卡顿,我们来一起看下原因,想要知道原因我们需要知道浏览器的基础架构和打开浏览器都发生了什么
Chrome 当前架构
面向服务架构(SOA),SOA 的制定是向着现代化pc 操作系统的变更而适配,pc 的多模块多服务多进程的执行,让Chrome 的架构朝向"面向服务架构",多模块间进行 通过服务接口来 访问.数据间通过IPC 来通信;
IPC: 不同进程之间交换数据或信号的机制,用于协同、资源共享与控制,像Android 的IPC 为 IBinder ,Chromium核心是 Mojo
一个HTML 页面的打开需要哪些进程
一个页面的打开,会有多个进程的打开,各个进程 通过 站点实例隔离渲染进程(Site Isolation / OOPIF)。通过IPC 来进行 进程来通信
- 浏览器主进程: 在资源充足的情况下各进程各司其事,主进程的主要模块示意图如下:
备注:在内存受限系统中,部分进程可能合并到主进程中运行。
- 渲染进程:运行 Blink(HTML/CSS/布局/渲染)和 V8(JS 引擎);负责页面脚本执行与 DOM 操作;被强沙箱限制。前端页面的渲染也会此呈现到Window
V8 进程类似Java 的虚拟机,V8的为更好的运行性能更贴近于操作系统,不能像Java 虚拟机的一次编译到处运行
- 插件进程:扩展运行环境,受权限与隔离控制 运行 通过C++ 来写的插件
- 网路进程:进行网路请求
- GPU进程:处理 GPU 加速的合成(compositing)、WebGL/Canvas 硬件加速和图形驱动交互
结论
打开的页面越多,进程就越多(个别情况 :Chrome 的默认策略,每个标签对应一个渲染进程。但如果从一个页面打开了另一个新页面,而新页面和当前页面属于同一站点的话,那么新页面会复用父页面的渲染进程。),申请占用到 计算机的 内存越多,当内存达到一定的阈值 浏览器就会发生卡顿,