前言

由于业务需求,我们采用了WKWebView和其它view混合布局的展现方案。如果你的WKWebView个数不多,例如同一个页面不超过3个WKWebView,是很难发现这个瓶颈问题。不是内存占用太多,是init确实占用太多主线程时间。如果你尝试异步初始化WKWebView发现是不行的,init必须在主线程中执行。这就导致如果一个页面同时需要多个WKWebView,会产生卡顿问题(当然,新款设备CPU性能强悍,和老设备对比非常明显)。

方案

解决方法就是预初始化N个WKWebView备用,当使用的时候,直接设置HTML。那,预初始化的时候不会卡主线程吗?当然会,不过我们可以将这个过程放到页面加载(网络请求转圈圈)的地方,也就是牺牲用户网速体验,提升页面渲染速度。总体下来,我感觉加载变流畅了呢?,毕竟更多的人已经习惯了网络加载缓慢,反而更关心页面流畅度。况且,根据实际测试,初始化20个WKWebView的时间也就1秒—1.5秒(都是针对老设备而言的),新款设备基本体验不出差别。
总之,就是写一个WKWebView池,必要的时间点初始化N个WKWebView,用的时候直接拿即可。如果池中的WKWebView不够用了,那就用一个初始化一个,反正都在主线程,没必要再预初始化更多了。

参考