我应该将 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 创建的内容进程的某种程度的重用。
我有一些 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 创建的内容进程的某种程度的重用。