我正在构建一个包含UIWebView
的应用程序,其中包含大量图像,CSS,嵌入式视频和JavaScript点击处理程序。滚动表现很糟糕,我正在寻找有效改善这种情况的方法。
如果以下任何特征导致滞后UIWebView
滚动,哪个?还有哪些其他因素会阻碍绩效?
width: 100%;
等声明进行扩展吗?box-shadow
,但还有其他CSS属性,这些属性也会因滚动性能受到不利影响而知道吗?如果有任何其他资源或工具可用于分析,我很乐意听到它们。
答案 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不会加载图像,直到它即将出现在屏幕上,这会导致口吃,并将其置于滚动视图中并将帧设置为内容大小,它必须在前面加载它们时间,但我不确定。我也确定这会产生后果(即预先增加内存使用量),但我从来没有遇到任何问题。