Chromium
简介
- Android webview是单进程模式的Chromium,学习WebView自然绕不开Chromium。
-
什么是Chromium?
Chromium是由Google主导开发的网页浏览器。以BSD许可证等多重*版权发行并开放源代码,Chromium的开发可能早自2006年即开始。Chromium 是 Google 的chrome浏览器背后的引擎,其目的是为了创建一个安全、稳定和快速的通用浏览器。—–百度百科
-
从Chromium的三个特点(安全、稳定、快速),进行总结:
- 安全:Chromium使用Sanbox(沙箱)模式,控制访问权限(如文件资源),保证浏览器的安全性。
- 稳定:默认情况下,Chromium为多进程模式,每个渲染器(标签页)为一个进程,相互间几乎互不影响。
- 快速:Chromium使用大量C++11、C++14新特性,如模板元、constexpr表达式等等,尽可能的加快运行速度。
- 接下来,分析一下Chromium的基础架构——多进程模式。
Chromium多进程模式
- Chromium多进程架构图(图片来源于Chromium官网)
-
我们从几个方面,分析一下Chromium的多进程模式
- 浏览器端(Browser)
- 渲染器端(Render)
- 浏览器和渲染器间的通信方式(IPC)
-
Browser
- 浏览器端直观上来说,就是打开Chrome后,浏览器的主体(*浏览器窗口)。它对应一个单独的进程,Browser进程。该进程一旦挂掉,整个浏览器就会崩溃。
- Browser进程可以看成一个指挥调度中心。它负责运行UI和管理标签页(Render)。如消息的派发,IO处理等等。
- Browser进程为每个Render的每个RenderView,维护对应的RenderViewHost,管理浏览器状态、渲染器交互。
- Browser进程为每个Render维护一个RenderProcessHost,用其来管理对应的RenderViewHost。
-
Render
- 一个Render进程,可以看成一个标签页。每个标签页,都对应着自己的Render进程。即使一个标签页挂掉,其他标签页也可以正常运作。
- 每个Render进程,持有一个Webkit(现在为Blink)内核对象。持有一个RenderProcess对象。这个对象,与Browser端的RenderProcessHost对应。同样,每个Render持有一个或多个RenderView,它于Browser端的RenderViewHost对应。
- RenderProcess管理与浏览器进程间的通信,维护标签页状态。
- RenderView代表网页的内容。
- RenderView的唯一标识为,RenderProcessHost+ViewID。
- Browser与Render间的通信。
- Browser与Render间通过IPC通信。
- Browser端通过RenderViewHost与特定标签页中的特定内容交互。
RenderViewHost -> RenderProcessHost -> IPC -> RenderProcess -> RenderView
总结
- 上述只是Chromium架构简单的分析,详细的内容请参考Chromium官网。
- 总得来说,Chromium多进程架构为
- 父进程:Browser,负责管理整个浏览器的状态,运行UI,消息派发(如申请文件资源)。
- 子进程:Render,负责渲染网页,于Webkit(Blink)交互,向外(Browser、GPU)发送请求。
- Chromium默认情况为多进程,也可在启动是配置参数,让其以单进程模式运行。Chromium速度很快,但其内存占用较大。。