问题描述
我有一些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
中重复使用相同的WKWebViewConfiguration
。WKWebView
是轻量级包装,它通过与Web View Content Process的进程间通信代理输入和输出。通过重用进程池,您将在一定程度上重用每个webView创建的内容进程。