改善UIWebView初始化时间

我的公司使用UIWebView来显示广告。 我遇到的问题是初始化UIWebView看起来很昂贵; 使用Time Profiler进行分析显示[UIWebView alloc] initWithFrame:CGRectMake(0,0,500,500)]需要31-40ms。 这足以在以60 FPS运行的游戏中引起明显的帧丢失。

有没有办法解决这个缓慢的初始化时间? 我目前的想法是在应用程序启动时(但在游戏开始之前)创建一个UIWebViewWKWebView用它(可能创建一个池来重用,比如UITableViewCell如何工作)或尝试查看WKWebView是否具有更好的性能。

以下是我的发现:

  1. WKWebView没有更快地初始化。 创建WKWebView需要花费与创建UIWebView类似的时间(在我做的1次测试中,创建两个WKWebView
  2. 创建的第一个Web视图比后续Web视图创建的时间要长得多。 第一个需要31-42毫秒; 后续的需要大约11毫秒来创建。 这里的好消息是,在启动应用程序时创建第一个Web视图可以更便宜地创建未来的Web视图,避免在游戏运行时达到40ms。
  3. 创建一个UIWebView池是我用例的一个很好的解决方案。 通过在应用启动时创建webview然后重新使用它们,我可以避免在游戏运行时导致帧丢失。

UIWebViewWKWebView之间的响应性没有太大差异,因为WKWebView iOS和OSX之间的一致性问题引入了WKWebView 。 底层引擎是Webkit的任何一种方式,它需要大量的初始化。

我最近发现的最好的解决方案是从一个0.1 alpha的WebView开始淡化WebView ,其中加载了url。 小心不要从0.0开始,并且没有从主视图层次结构中分离webview,因为不会加载您的URL。

当调用didFinishLoading您可以将其淡化为1.0,从而提供更好的用户体验。 我个人不喜欢UIWebView池,因为我在维护它时遇到了一些内存问题,特别是在iOS 7设备上。