- WKWebView(WebKit) 包含 3 种进程:UI Process, Networking Process, WebContent Process。
- UI Process:即 App 进程,WKWebView(WebKit) 中部分模块运行在此进程,会负责启动其它进程。
- Networking Process:即网络模块进程,主要负责 WKWebView 中网络请求相关功能;此进程 App 中只会有启动一次,多个 WKWebView 间共享。
- WebContent Process:即 Web 模块进程,主要负责 WebCore, JSCore 相关模块的运行,是 WKWebView 的核心进程。此进程在 App 中会启动多次,每个 WKWebView 会有自己独立的 WebContent 进程。
- 各个进程之间通过 CoreIPC 进程通信。
总的来说:在一个客户端 App 中,多个 WKWebView 使用中会共享一个 UI 进程(与 App 进程共享)、共享一个 Networking 进程、每个 WKWebView 实例独享一个 WebContent 进程。
示例:
此处关于 WebContent Process 和 Networking Process 的启动规则,官方文档并未解释特别清楚,且因为版本迭代等原因,文档与目前最新规则也略有出入。为避免混淆与歧义,下面结合 WebKit 源码稍作分析。
WebContent 进程启动规则
根据官方文档描述:
A WKProcessPool object represents a single process that WebKit uses to manage web content. To provide a more secure and stable experience, WebKit renders the content of web views in separate processes, rather than in your app’s process space. By default, WebKit gives each web view its own process space until it reaches an implementation-defined process limit. After that, web views with the same WKProcessPool object share the same web content process.
规则是优先使用创建新进程,当进程上线超过某阈值之后则会共享,在 WebKit 内部由 maximumProcessCount 控制。但是此规则只对 iOS13 之前的系统生效,iOS13 之后的系统,WKWebView 每次创建实例都会启动一个新的 WebContent Porcess。相关实现如下。
iOS13 前:
iOS 13 及以后: