PhoneGap - 在安卓设备上与浏览器相比表现较差。

9
我使用jquery mobile和phonegap开发了一个android应用程序。我通过usb将应用程序部署到我的设备上,但是应用程序的性能非常差,特别是在滚动长列表时更加明显。
奇怪的是:如果我只是在手机上打开浏览器并直接访问index.html,整个应用程序就会运行得很流畅。同样的技术,同样的内容。我没有使用phonegap本地api或任何类似的东西。
在android 4.0.2上测试了phonegap 1.5.0和1.7.0rc1,jquery mobile 1.1.0。
有什么想法吗?

假设两者都使用系统的 WebKit 库,似乎可能是不同的配置设置或一个环境中有额外的插件,或者您的代码中存在一些奇怪的问题,挑战了其中一个但没有挑战另一个。将两者指向 JavaScript 基准测试站点可能会很有趣。 - Chris Stratton
我只是好奇这里所说的列表有多大? - codaniel
@codaniel:大约50个带有缩略图的元素。 - rbk
@Chris:我不使用任何插件或仅在PhoneGap中运行的代码。 - rbk
你可能没有任何扩展,但浏览器很可能有对系统 Webview 功能的覆盖/重写 - 这就是你的链接所推测的。但要排除 JavaScript 中的问题 - 将两者指向基准站点,并查看是否在其他人的代码上看到性能差异的证据。 - Chris Stratton
我有过完全不使用任何框架的相同经验。该应用在iOS上运行良好,但作为phonegap应用程序在Android webview上却无法正常工作。 - Per Quested Aronsson
5个回答

11

在蜂巢(3.0),冰淇淋(4.0)和后续设备上,您可以通过在<Application...>标签中添加以下内容来提高性能:

android:hardwareAccelerated="true"
你可以将minSdk设置为8(Android 2.2)以确保兼容性,并将targetSdk设置为15(Android 4.0),这样只有当设备支持硬件加速时才会启用它。
我相信使用此标志后,我的应用程序的性能与在浏览器中运行它们相同,所以我猜这是因为浏览器使用了硬件加速 :)

这个问题与在使用Phonegap + FastClick + Android 4.1.1+时的键盘/打字性能有关 - 打字性能极其缓慢(在浏览器或Android 2.3中没有问题)。启用此标志解决了问题 :-)。这对我也管用。 - Maurice
哇!在我那个只有2.3的可怜三星手机上,它表现得真的好多了。 - Toni Michel Caubet

2
我有一个类似的问题:一个包含较长列表的“中等复杂”主题div的页面。HTC手机的浏览器没有显示问题。但是在phonegap应用程序中,渲染完全失败了。我看到了一种WSOD,只有触摸屏幕后才消失。触摸后,页面正确显示。
当我将div列表缩短为一个或两个div元素,或者减少div中的子元素并减少由css复杂性引起的渲染工作时,问题就不存在了。
白屏看起来像整个body都是不可见的,因为只显示了文档的背景颜色(我添加了淡粉色)。所以我想,阅读this thread之后,渲染是问题所在。
我尝试了我在in this thread中找到的各种建议,以使应用程序在没有“WSOD”的情况下正常工作。但是什么都没用。其中一些使应用程序的显示变得更糟糕。
最终,在整整一天的搜索之后,我做到了。我在AndroidManifest的标签(而不是标签)中设置了……
<application android:hardwareAccelerated="false" ...

现在这个应用程序的表现和我的网络浏览器一样快。看起来硬件加速并不总是最好的特性...
我的版本: phonegap 3.5.0,Android 4.0.3,jQuery v2.1.0,HTC Sense 3.6

1

0
如果您可以确认浏览器表现更好(而不是您的代码在一个浏览器中受挫但在另一个浏览器中没有问题),那么您可以考虑部署为HTML5离线应用程序,这样您实际上将在浏览器中运行。

0

在使用jquery mobile滚动相同数量的列表项时,我们遇到了性能问题。性能非常差(我们甚至没有在PhoneGap环境中尝试),因此我们使用iScroll库重写了应用程序...现在应用程序可以平稳地滚动。

如果您处于开发的初期阶段,可以尝试更改UI库。

在这种情况下,我们经常将应用程序部署到测试设备上,以及时处理性能问题...这已成为一种“政策”:)


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