我应该将 WKWebView 永远保留在 UICollectionView 中以避免重新加载吗?

Should I keep WKWebView in UICollectionView forever to avoid reloading?

我有一些 WKWebViews 加载了一些 HTML,加载需要几秒钟。我将 WKWebView 嵌入到我的 UICollectionViewCell 中。因此,当用户滚动 UICollectionView 时,单元格可能会被重复使用,但我不想在用户向后滚动时再次加载 HTML。

永远保留 WKWebView 是个好主意,即使它们不在屏幕上也是如此?我不希望他们每次都重新加载,因为这会影响用户体验。但是,我确实担心内存使用。

解决此问题的最佳解决方案是什么?谢谢。

发生重用时:

  • 你应该取消之前URL加载到正在重用的webView; (1)
  • 您应该从头开始加载新的 URL; (2)
    • 通过网络加载 URL 的内容 (2.1)
    • 将 DOM 加载到 Web 视图 (2.2)

有几种方法可以优化这个过程:

  • 避免 (1),即避免重用 - 然后您的应用会进入 off-screen 视图,并且很可能会由于内存压力而被杀死
  • 尽量避免 (2.1) - 您可以在将 URL 的数据提供给 Web 视图之前缓存它,并在缓存数据存在时获取它。或者,或者,添加在服务器端发送 cache control headers 的功能,然后 WKWebView 将自动进行缓存。
  • 尝试优化 (2.2) - 您可以在您创建的所有 webView 中重用相同的 WKProcessPool,方法是将相同的 WKProcessPool 实例分配给您的 [=18] =]. WKWebView 是轻量级包装器,它通过与 Web 视图内容进程的 inter-process 通信代理输入和输出。通过重用进程池,您将实现对每个 webView 创建的内容进程的某种程度的重用。