那是由于现代浏览器采用的都是多进程浏览器
,每一个进程处理一个任务。 以chrome
浏览器为例,打开一个chrome
浏览器最少会产生4
个进程,分别是:c++
1. 浏览器进程 2. 网络进程 3. GPU进程 4. 页面进程(正常状况下一个页面一个进程,特殊状况下面详细讲) 5. 插件进程(若是有插件的话,一个插件一个进程)
详细以下图:(如何查看下图这种详细的进程,chrome右上角三个点 --> 更多工具 --> 任务管理器)chrome
chrome 默认每一个页面一个进程,特殊状况:若是你从当前页面进入另外一个新的页面,并且新页面的域名和当前页面同样,那么新页面会共用当前页面的页面进程,以下图:(场景:我从文章的评论者的名字进入了他的我的主页)浏览器
chrome
要建立这么多进程,之前的单进程架构
很差吗?先说说以前的单进程架构存在的问题
:安全
不流畅
网络
使用同一个进程,插件会堵塞页面的加载
。不安全
架构
插件的权限过大,能够读取和修改本地文件
,甚至修改电脑配置文件(使用c/c++编写的插件,能够彻底控制你的电脑)。不稳定
工具
大部分是第三方编写的,水平良莠不齐,崩溃也是屡见不鲜
,插件的崩溃将直接致使浏览器无响应或崩溃。因此在多年的研究、开发后,多进程架构
c位出道,基本解决了这些的问题:spa
流畅性
:插件
插件和页面的js只能影响本身的进程
,死循环或资源加载慢只能影响本身。(固然 现代浏览器特别吃cpu和内存资源,cpu内存吃满了仍是会卡,多进程浏览器的缺点)安全性
code
沙箱机制,没法写数据,只能读有限的数据
,一般是你当前域名下载的文件,将恶意插件和js的后门堵死了。稳定性
:
进程间是相互隔离的
,因此当一个页面或一个插件崩溃时,仅仅只会影响到当前页面和那个插件自己,完美解决一颗老鼠屎的问题。欢迎交流,有不完善的地方欢迎指出