macos - 如何阻止 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 值。
任何帮助是极大的赞赏。
解决方案
您可以使用单例 WKProcessPool 并且所有 wkwebview.configuration.processpool 都使用该 WKProcessPool 单例;</p>
它会解决cpu太高。
推荐阅读
- python - 返回公会所有者用户名 discord.py 的 Discord 机器人
- python - Python 3.9.1(或 3.9.2)中“subprocess”模块的问题 - “subprocess.Popen”不起作用
- java - 如何在 http 流的末尾发送错误代码
- python - 一次为多个参数运行 AWS Lambda
- css - chrome macOS 水平滚动条无论如何都保持隐藏状态(尽管溢出:滚动)
- javascript - 在一台 Node.js 服务器上部署多个 React 应用程序
- android - 如何通过套接字 Android Socket 发送图像位图
- excel - 在 VBA vlookup 中参考不同的工作表和定义的变量
- javascript - 按数组过滤数组,具有真值或假值Angular
- android - 不在 androidStudio 中编译我的颤振应用程序