来源:https://blogs.windows.com/msedgedev/
作者:Microsoft Edge Team
今天的浏览器更像是操作系统,而不是文档查看器。用户在浏览器中执行的任务越来越多,而在桌面应用程序中执行的任务越来越少。然而,每个网页、Web应用和扩展都会使用内存。因此,用户经常会关心内存使用情况如何影响他们的体验。
我们正在努力开发解决方案,以解决这一问题。这些解决方案包括为网站和扩展开发者提供信息,帮助他们使用更少的资源,并帮助用户了解他们的浏览习惯如何影响Microsoft Edge的资源使用。
我们将在未来几个月内分享更多关于Microsoft Edge的内存使用情况,从今天的文章开始深入探讨Microsoft Edge的多进程架构。我们希望这能让您深入了解Microsoft Edge如何使用您的计算机资源,浏览习惯如何影响资源使用,以及您如何帮助我们让Microsoft Edge变得更好。
多进程体系结构如何帮助提高浏览器的安全性和可靠性
许多浏览器是使用多进程体系结构构建的,这意味着浏览器被划分为不同的进程。
浏览器进程(Browser process): 这是主要的进程,它帮助管理窗口和标签,并控制浏览器框架,如地址栏和前进和后退按钮。它还可以对网络请求和文件访问等实用程序的特权访问进行路由。
渲染进程(Renderer processes): 这些控件通过执行网站提供的代码来控制网站如何在标签页中渲染。它们处理HTML、CSS、JavaScript、图像等。每个渲染器进程的资源使用情况都取决于所托管的内容。
GPU进程(GPU process): 该进程负责与GPU(图形处理单元)进行通信并处理所有GPU任务。GPU是一种硬件,可以快速执行与图形相关的计算,并将输出发送到显示器以进行显示,现代浏览器使用GPU来快速渲染网页。
实用程序进程(Utility processes): 音频播放、网络服务、视频采集、数据解码、收藏管理器都由这些进程来处理,这样Microsoft Edge就可以控制和审核这些资源的访问,协调全局系统资源的使用。
插件进行和扩展程序进程(Plug-in processes and extension processes): 插件进程包含活动插件,例如Adobe Flash,而扩展进程包含活动扩展。每个进程执行由插件或扩展提供的代码,每个进程的资源使用情况根据所提供的代码而不同。每个进程也有允许插件或扩展与浏览器和渲染器进程通信的代码。
Crashpad处理程序进程(Crashpad handler process): 这可以跟踪Microsoft Edge中不同进程的健康状况。如果Microsoft Edge崩溃,这个过程将帮助浏览器捕获并将崩溃报告传输到微软服务器,我们使用这些崩溃报告来寻找和修复崩溃。
现在我们已经介绍了每个进程的作用,让我们来看看一个进程的例子,它将为一个打开了一个标签页并在Microsoft Edge中打开了两个扩展的用户运行。
浏览器实例,其中一个选项卡已打开,两个扩展已打开
如果用户打开Windows任务管理器,则将显示进程:
在此示例中,用户将看到九个进程正在运行:
- 浏览器框架的浏览器进程
- 一个帮助显示图形的GPU进程
- 一个正在运行示例网站提供的代码的渲染器进程
- 网络服务实用程序进程,帮助处理网络请求
- 音频服务实用程序进程,可帮助播放音频
- 运行Flash提供的代码的插件进程
- 两个扩展进程,每个扩展进程一个,运行扩展提供的代码
- 一个监控Microsoft Edge健康状况的crashpad处理程序
所有这些过程一起写作,给你今天使用的浏览体验。
现在让我们来看另一个例子。在下一个示例中,用户打开了四个选项卡,并启用了两个扩展(图2)。每个标签都有一个广告(两个来自一个来源,两个来自另一个来源)。
浏览器实例打开了四个选项卡,并且打开了两个扩展
在此示例中,如果用户打开任务管理器,他们将看到14个进程正在运行:
- 浏览器框架的浏览器进程
- 一个帮助显示图形的GPU进程
- 六个渲染器进程:
- 四个标签页的渲染器进程,每个标签页都有自己的渲染器进程,并运行网站提供的代码。有时,来自同一域的选项卡将共享一个进程。
- 两个广告的渲染器进程。来自同一域名的广告将共享一个进程,并将运行广告提供的代码。在本例中,第一个来源的两个广告将共享一个进程,第二个来源的两个广告将共享一个单独的进程。这些广告使用称为子帧的东西嵌入网页中。(稍后我们将详细讨论子帧。)
- 网络服务实用程序进程,帮助处理网络请求
- 音频服务实用程序进程,可帮助播放音频
- 一个正在运行Flash的插件进程
- 两个扩展进程,每个扩展进程一个,运行扩展提供的代码
- 一个监控Microsoft Edge健康状况的crashpad处理程序
一些例子更加复杂。您可能会看到对您不可见的子框架的其他进程,或者您可能会看到项目(如service workers人员或web workers)与选项卡或子框架共享进程。service workers和web workers是在后台运行的脚本,以提高性能,并允许您在没有互联网连接的情况下使用一些网站和应用程序。
Chromium's多进程架构:https://www.chromium.org/developers/design-documents/multi-process-architecture
多进程架构的好处
每个进程都有不同的目的,影响进程总数的因素很多。那么,Microsoft Edge为什么要使用这种多进程架构呢?
与其他现代浏览器一样,Microsoft Edge使用这种架构来提高安全性、可靠性和对浏览器如何使用资源的可问责性。Microsoft Edge基于Chromium项目构建,并与其他Chromium浏览器共享一个通用实现。
增强的安全性
如果恶意软件利用了一个渲染器进程中的安全漏洞,则很难逃脱该进程并影响另一个进程。
渲染器进程是最有可能受到攻击的进程,因为它是与网站交互的进程。该进程的特权较低,并且对操作系统的访问受到极大限制,因此,如果恶意软件控制该进程,则它将无法控制该计算机。渲染器进程和浏览器进程之间的通信范围狭窄且受到保护,恶意软件很难利用此优势来利用浏览器进程。
另外,进程隔离可以防止一个进程访问另一个进程的内存,这也提高了浏览器的安全性。举例来说,假设您正在网上购买衬衫,并且该网站上有一个广告。您所访问的网站需要访问您的信用卡信息才能完成交易;但是,广告不需要访问此信息。广告将按照自己的流程进行处理,因此即使广告遭到入侵,也无法轻松访问您的敏感信息。
可靠性
如果网页、Web应用、扩展程序或插件发生崩溃,只有正在崩溃的进程才会受到影响,提高浏览器的可靠性。浏览器的其余部分,包括大多数其他选项卡,将保持稳定。
资源问责制
隔离每个进程,可以更容易地在任务管理器中看到哪个进程使用了最多的资源,并提供有关哪些资源使用的信息。Microsoft Edge使用最多的资源,还是网站,扩展程序或插件?您还可以在Microsoft Edge的内部任务管理器中看到这些信息,您可以在Microsoft Edge中按Shift+Esc键打开,或者进入浏览器的上角,选择设置和更多(...)>更多工具>浏览器任务管理器。
本文转载自微信公众号「前端全栈开发者」,可以通过以下二维码关注。转载本文请联系前端全栈开发者公众号。