浏览器结构

205 阅读2分钟

浏览器结构

进程与线程

  • 一个进程就是一个程序的运行实例。详细解释就是,启动一个程序的时候,操作系统会为该程序创建一块内存,用来存放代码、运行中的数据和一个执行任务的主线程,我们把这样的一个运行环境叫进程
  • 进程中包括很多线程,公用一个内存块,数据互通,一个线程崩溃会使得整个进程崩溃。
  • 当一个进程关闭之后,操作系统会回收进程所占用的内存
  • 进程之间的内容相互隔离

单进程浏览器

  • 不稳定性|一个线程崩溃浏览器崩溃
  • 不流畅|页面进程任务阻塞
  • 不安全|单页面可以拿到真个浏览器数据(页面间内存泄漏)

多进程浏览器

一个页面一个进程
安全问题:Chrome 把插件进程和渲染进程锁在沙箱里面 image.png

  • 浏览器进程负责页面显示/交互/子进程管理等
  • 渲染进程。将 HTML、CSS 和 JavaScript 转换为用户可以与之交互的网页,排版引擎 Blink 和 JavaScript 引擎 V8 都是运行在该进程中,Chrome 会为每个 Tab 标签创建一个渲染进程。出于安全考虑,渲染进程都是运行在沙箱模式下。
  • 网络进程。负责页面的网络资源加载,之前是进程模块选择被独立出来。
  • 插件进程。插件易崩溃,所以需要通过插件进程来隔离。
  • GPU 进程如今前端对于GPU资源的使用变多浏览器也加入了专门的GPU进程。

同站进程共享

有时候同一站点的不同页面会互相调用脚本,现在浏览器默认一个标签一个进程,但是从一个页面打开了一个同站点的页面,那么新页面与父页面共享复用。这样有时导致多进程浏览器还是单页卡死整个崩溃。

总结

  • 早期浏览器:不稳定(单独进程) 不流畅(单独进程) 不安全(沙箱)
  • 早期多进程浏览器: 主进程 渲染进程 插件进程
  • 现代多进程架构: 主进程 渲染进程 插件进程 GPU进程 网络进程
  • 未来面向服务架构: 将UI/文件/AUDIO/网络等进程分离作为底层基础服务。