是否应该将WKWebView永远保留在UICollectionView中,以避免重新加载?

问题描述

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

即使WKWebView不在屏幕上,这也是一个好主意吗?我不希望他们每次都重新加载,因为那会影响用户体验。但是,我确实担心内存使用情况。

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

解决方法

发生重用时:

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

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

  • 避免(1),即避免重用-然后您的应用进入屏幕外视图,很可能由于内存压力而被杀死
  • 尝试避免(2.1)-您可以在将URL的数据馈送到Web视图之前对其进行缓存,并在存在时获取缓存的数据。或者,或者添加一种在服务器端发送cache control headers的功能,然后WKWebView将自动进行缓存。
  • 尝试优化(2.2)-通过将相同的WKProcessPool实例分配给webView实例,您可以在创建的所有WKProcessPool中重复使用相同的WKWebViewConfigurationWKWebView是轻量级包装,它通过与Web View Content Process的进程间通信代理输入和输出。通过重用进程池,您将在一定程度上重用每个webView创建的内容进程。