如何提高UIWebView滚动性能?

我正在构build一个包含UIWebView的应用程序,其中包含大量的图像,CSS,embedded式video和JavaScript轻触处理程序。 滚动性能很差,我正在寻找最有效的方法来改善这种情况。

如果以下任何一个特性导致UIWebView滚动滞后? 还有什么其他因素可能会阻碍performance?

  • 图片数量
    • 我应该从用户滚动过去的时候从DOM中删除图像,如果他们向后滚动,将它们添加回来?
  • 图像的大小
    • 视网膜视图中的视网膜质量的图像会影响滚动性能比小版本更多吗?
  • 图像缩放
    • 提前调整图像大小会产生很大的影响,而不是依靠Web视图来根据width: 100%;声明进行缩放width: 100%;
  • CSS
    • 我已经避免了box-shadow ,但是还有其他一些CSS属性是否会对滚动性能产生负面影响?

如果有任何其他资源或工具可用于分析,我很乐意听到他们的消息。

这是我刚刚从Apple Developer Technical Support得到的答案:

目前,我们没有提供任何优化UIWebView渲染的机制。 你看到不同的原因是由于移动Safari和UIWebView不使用相同的渲染引擎。

性能取决于加载的内容。 如果正在运行JavaScript或正在使用插件,则可能会影响性能。

我build议你在http://developer.apple.com/bugreporter/上提交一个bug报告,详细描述你的情况。 这也会让你知道你的bug报告的状态。

UIWebView的一个可能的替代scheme是开源的DTCoreText库: https : //github.com/Cocoanetics/DTCoreText ,它为Float Reader应用程序提供支持: http : //itunes.apple.com/us/app/float-reader / id447992005?MT = 8

LinkedIn的人在他们的iPad应用程序上使用了UIWebView和HTML5进行了广泛的工作。 他们的图像,文字和video沉重的饲料是在UIWebView中呈现。

下面的博客文章应该给你很多起点来提高性能

LinkedIn for iPad:5种平滑的HTML5无限滚动技术

我刚才也有类似的问题。 我发现把webview放在scrollview里面可以大大提高滚动性能。 在webview完成加载之后,我禁用了在webview上的滚动,将webview的框架和scrollview的contentSize设置为webview内容的大小。

 -(void) webViewDidFinishLoad:(UIWebView *)webView { float size = [[self.webView stringByEvaluatingJavaScriptFromString:@"document.body.offsetHeight"] floatValue]; [self.scrollView setContentSize:CGSizeMake(self.view.frame.size.width, size)]; [webView setFrame:CGRectMake(webView.frame.origin.x, webView.frame.origin.y, webView.frame.size.width, size)]; [(UIScrollView*)[webView.subviews objectAtIndex:0] setScrollEnabled:NO]; } 

我假设webview不加载图像,直到它将出现在屏幕上,这导致了口吃,并通过将其放在滚动视图中,并设置框架的内容大小,它必须提前加载它们,但我不确定。 我也确信这会带来一些后果(例如,预先增加的内存使用量),但是我从来没有这样做过任何问题。