首页 > 解决方案 > 如何阻止 WKWebView 创建过多进程?

问题描述

我有一个 MacOS 应用程序,它创建了许多不同类型的 NSViews,其中一些包含 WKWebViews。WKWebViews 的数量可以变得相当大(几十个或更多)。

问题是这些 WKWebView 中的每一个都创建了多个进程,这在 Activity Monitor 中很容易看到。当进程数过多时,整个系统本质上会陷入死机:运行中的应用程序仍然运行缓慢,但无法启动新应用程序,Finder 停止工作,必须重新启动系统。

所以我正在寻找一种方法来控制 WKWebViews 启动的进程数。

根据 Apple 文档,这是由 WKWebView 的 processPool 属性管理的,因为它们声明:“与 Web 视图关联的进程池由其 Web 视图配置指定。每个 Web 视图都有自己的 Web 内容进程,直到实现 -达到定义的进程限制;之后,具有相同进程池的 Web 视图最终共享 Web 内容进程。” (来自页面:https ://developer.apple.com/documentation/webkit/wkprocesspool?language=objc )。

我无法弄清楚如何定义“实现定义的流程限制”。当我 NSLog WKWebView 配置的描述时,我得到这个:

WKWebView 配置说明:

>; 偏好=>

我可以看到有一个 processPool 和它的配置(称为 _WKProcessPoolConfiguration),以及一个称为 maximumProcessCount 的值,它设置为 0。我假设 0 表示进程计数是无限的,我想将其设置为合理的数量。但我不知道如何设置这个值!processPool 本身没有属性,所以我不知道如何访问这个 maximumProcessCount 值。

任何帮助是极大的赞赏。

标签: macoswebkitwkwebviewwkwebviewconfiguration

解决方案


  1. 您可以使用单例 WKProcessPool 并且所有 wkwebview.configuration.processpool 都使用该 WKProcessPool 单例;</p>

  2. 它会解决cpu太高。


推荐阅读