改善UIWebView初始化时间
我的公司使用UIWebView
来显示广告。 我遇到的问题是初始化UIWebView
看起来很昂贵; 使用Time Profiler进行分析显示[UIWebView alloc] initWithFrame:CGRectMake(0,0,500,500)]
需要31-40ms。 这足以在以60 FPS运行的游戏中引起明显的帧丢失。
有没有办法解决这个缓慢的初始化时间? 我目前的想法是在应用程序启动时(但在游戏开始之前)创建一个UIWebView
, WKWebView
用它(可能创建一个池来重用,比如UITableViewCell
如何工作)或尝试查看WKWebView
是否具有更好的性能。
以下是我的发现:
-
WKWebView
没有更快地初始化。 创建WKWebView
需要花费与创建UIWebView
类似的时间(在我做的1次测试中,创建两个WKWebView
。 - 创建的第一个Web视图比后续Web视图创建的时间要长得多。 第一个需要31-42毫秒; 后续的需要大约11毫秒来创建。 这里的好消息是,在启动应用程序时创建第一个Web视图可以更便宜地创建未来的Web视图,避免在游戏运行时达到40ms。
- 创建一个
UIWebView
池是我用例的一个很好的解决方案。 通过在应用启动时创建webview然后重新使用它们,我可以避免在游戏运行时导致帧丢失。
UIWebView
和WKWebView
之间的响应性没有太大差异,因为WKWebView
iOS和OSX之间的一致性问题引入了WKWebView
。 底层引擎是Webkit的任何一种方式,它需要大量的初始化。
我最近发现的最好的解决方案是从一个0.1 alpha的WebView
开始淡化WebView
,其中加载了url。 小心不要从0.0开始,并且没有从主视图层次结构中分离webview,因为不会加载您的URL。
当调用didFinishLoading
您可以将其淡化为1.0,从而提供更好的用户体验。 我个人不喜欢UIWebView
池,因为我在维护它时遇到了一些内存问题,特别是在iOS 7设备上。