改进UIWebView初始化时间

时间:2015-04-23 01:19:45

标签: ios objective-c performance uiwebview

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

有没有办法解决这个缓慢的初始化时间?我当前的想法是在应用程序启动时(但在游戏开始之前)创建UIWebView,并重用它(可能创建它们的池以便重用,如UITableViewCell如何工作)或尝试和看看WKWebView是否有更好的表现。

2 个答案:

答案 0 :(得分:4)

以下是我的发现:

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

答案 1 :(得分:0)

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

我最近发现的最佳解决方案是从{0.1}开始逐渐消失,其中0.1 alpha的视图加载了网址。小心不要从0.0开始,并且没有从主视图层次结构中分离webview,因为你的url不会被加载。

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