如何提高UIWebView滚动性能?

时间:2012-04-15 16:35:39

标签: ios performance uiwebview webkit scroll

我正在构建一个包含UIWebView的应用程序,其中包含大量图像,CSS,嵌入式视频和JavaScript点击处理程序。滚动表现很糟糕,我正在寻找有效改善这种情况的方法。

如果以下任何特征导致滞后UIWebView滚动,哪个?还有哪些其他因素会阻碍绩效?

  • 图像数量
    • 我应该在用户滚过它们时从DOM中删除图像,如果它们向上滚动则将它们添加回来吗?
  • 图像大小
    • 网页视图中的Retina质量图像会比较小版本影响滚动性能吗?
  • 图像缩放
    • 提前调整图片大小会产生很大的影响,而不是依靠网页视图根据width: 100%;等声明进行扩展吗?
  • CSS
    • 我避免使用box-shadow,但还有其他CSS属性,这些属性也会因滚动性能受到不利影响而知道吗?

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

3 个答案:

答案 0 :(得分:8)

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

  

目前,我们没有提供任何优化UIWebView渲染的机制。   您看到差异的原因是Mobile Safari和UIWebView没有使用相同的渲染引擎。

     

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

     

我建议您在http://developer.apple.com/bugreporter/提交错误报告,详细说明您的情况。这也可以让您了解错误报告的状态。

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

答案 1 :(得分:5)

LinkedIn上的人已经在他们的iPad应用程序上完成了UIWebView和HTML5的大量工作。他们的整个视频,文本和视频都是在UIWebView中呈现的。

以下博客文章应该为您提供很多性能改进的起点

LinkedIn for iPad: 5 techniques for smooth infinite scrolling in HTML5

答案 2 :(得分:1)

我刚才有类似的问题。我发现将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不会加载图像,直到它即将出现在屏幕上,这会导致口吃,并将其置于滚动视图中并将帧设置为内容大小,它必须在前面加载它们时间,但我不确定。我也确定这会产生后果(即预先增加内存使用量),但我从来没有遇到任何问题。