美文网首页
浏览器你真的了解吗

浏览器你真的了解吗

作者: 芝麻香油 | 来源:发表于2020-04-14 14:34 被阅读0次

太长不读版

问:你知道打开一个页面,至少会开启几个浏览器进程?
答:xxxxxxxxx

正文

关于打开一个页面,至少会开启几个浏览器进程?

通过上图可以看出是四个,那么为什么打开一个页面,会开启四个进程呢?

关于进程和线程的概念在此就不赘述了(毕竟那点知识已经还给老师了)

早期单进程浏览器

指所有的功能模块都运行在同一个进程里,包括:网络、插件
JavaScript运行环境、渲染引擎和页面等

单进程浏览器架构图.png
存在的问题
  1. 不稳定
    早期浏览器需要借助插件来实现诸如Web视频、游戏等功能,然鹅插件是最容易出问题的。在单进程浏览器中,一个插件的崩溃会引起整个浏览器的崩溃

  2. 不流畅
    因为所有页面渲染、JavaScript执行环境以及插件都运行在同一个线程中,意味着同一时刻只有一个模块可以执行

例如下面这个脚本:

while(true) {
  // do something
}

如果这个脚本执行了,那么它会占用整个线程,导致其他运行在该线程的模块没有机会被执行。使得整个浏览器失去响应,变卡顿

  1. 不安全
    由于所有模块都运行在一个进程中,如果在插件中编写脚本窃取账号密码,或者释放病毒,便会引发安全性问题

早期多进程架构——早期多进程浏览器

早期Chrome进程架构图

不稳定:由于进程之间是相互隔离的,因此不存在一个页面或某个插件的崩溃,影响到整个浏览器

不流畅:同样,JavaScript也是运行在渲染进程中的,所以即使JavaScript阻塞了渲染进程,也只会影响到当前页面的渲染进程,并不会影响浏览器及其他页面

不安全:采用多进程架构的额外好处是可以使用安全沙箱(安全沙箱可以看成是操作系统给进程上加锁,沙箱里的程序可以运行,但不能在硬盘读写任何数据),把插件进程和渲染进程锁在沙箱里

现代多进程架构

最新Chrome进程架构图
  • 主进程:主要负责界面显示、用户交互、子进程管理,同时提供存储功能

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

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

  • 网络进程:负责页面的网络资源加载

  • 插件进程:负责插件运行

未来面向服务架构

Chrome“面向服务的架构”进程模型图

简言之,原来的各种模块会被重构成独立的服务,每个服务都可以在独立的进程中运行。构建一个更内聚、松耦合、易于维护和扩展的系统

小结

打开一个页面,至少会开启四个浏览器进程,即一个浏览器主进程、一个GPU进程、一个网络进程以及一个渲染进程

相关文章

网友评论

      本文标题:浏览器你真的了解吗

      本文链接:https://www.haomeiwen.com/subject/lrbzmhtx.html