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