基于Web的移动应用程序闪烁问题的根本原因是什么?

3
我刚创建了一个简单的Apache Cordova应用,基于jqTouch和{{link3:Zepto}。
应用有3个页面,其中一个包含4个控件的表单,其他页面包括3个导航元素和几行文字
使用jqTouchapplejqtouch主题,应用程序显示大量闪烁。在页面转换期间,屏幕的某些部分会呈现为黑色。
jqTouch的innsbruck主题有更少的闪烁,但仍然不适合生产使用。
测试应用程序不使用附加的JavaScript。所有导航都使用#pageName链接完成。因此,用户提供的JavaScript可能在这里没有问题。
有趣的是:如果我使用内置移动浏览器打开 jqTouch演示,这些会以更少的闪烁执行。
由于应用程序非常简单-甚至不使用其他样式或图像-,我想知道这些渲染问题的根本原因是什么。
使用此环境进行测试:
Apache Cordova 3.0.5 Android 4.4.2 Nexus 7 Appcelerator Titanium-也很差 此外,我还尝试了 Appcelerator Titanium,并使用 rss示例。在测试设备上,性能也很差。
Appcelerator声称编译为本机。但由于性能不佳,我猜他们也编译到WebViews中。

他们这样做吗?还是Appcelerator Titanium将视图和控制器编译为纯Java代码?

下一个尝试

接下来,我要尝试Xamarin

1个回答

4
首先,原生浏览器比您的Cordova应用程序更有效率。
Cordova使用的是较弱的Webview。
除此之外,您看到的闪烁问题可以通过在GPU上渲染元素来解决。
通过CSS,您可以指定:
transform-style: preserve-3d;

或者
transform: translate3d(0,0,0);

需要加上所需的供应商前缀。

这将强制使用GPU渲染元素,并解决你的闪烁问题,但你必须针对故障元素进行处理。


如果我把所有东西都打包到一个移动本地Web服务器中,并启动系统浏览器,那么性能可能会更好?如果我正确理解了您的A,那么在WebKit WebView中呈现“人工”UI是主要问题?至少在iOS上,Cordova的WebKit应该与Safari一样快/慢吧? - SteAp
如果CSS跳过所有淡入/溶解动画,结果会更好吗? - SteAp
1
你会在所有地方都遇到闪烁问题,包括Webview和浏览器。这不是性能相关的问题,而是渲染问题,你可以使用此CSS修复。如果它不影响性能,就没有必要跳过动画部分。手机/平板电脑可以很好地处理这些内容。 - Yoann
随着iOS8的发布,Webviews和原生Safari之间的差异将不再是问题:http://9to5mac.com/2014/06/03/ios-8-webkit-changes-finally-allow-all-apps-to-have-the-same-performance-as-safari/ - Yoann

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接