6

我们正在开发一个 Sencha Touch 2 应用程序,该应用程序利用 Phonegap 能够将其安装为应用程序并访问设备的存储。这在 iPad 2 和 iPad 3 上运行良好。但是,当我们尝试在 Android 设备上运行该应用程序时,性能非常缓慢。减慢系统速度的主要因素是列表和轮播。当我们尝试通过 chrome 浏览器测试相同的应用程序时,性能与 iPad 相当。

您对我们可以做些什么来提高 android 的性能有什么建议,甚至可能放弃 Phonegap 以获得更好的东西。或者如果我们可以强制 phonegap 作为 chrome 浏览器运行。

感谢您的时间和帮助。

4

3 回答 3

12

您在这里遇到的问题是 Android 浏览器不使用图形硬件加速。这意味着 Sencha(和其他 HTML5 库,如 jQueryMobile、iScroll 等)使用标准技巧来提供良好的滚动性能,例如 CSS 3D 转换以使您的列表在单独的层中呈现,这可以然后在硬件上翻译,不会在Android上工作。相反,列表滚动将完全在软件中执行,这会很慢!

然而,Chrome 浏览器确实提供 GPU 加速。Android 设备不仅能够提供良好的 HTML5 体验,只是标准浏览器还没有利用 GPU 硬件。

除非您可以强制最终用户使用 Chrome(我对此表示怀疑),否则唯一的选择是降低用户体验,并为 Android 用户提供稍微简单的 UI。

有关详细信息,请参阅“提高 HTML5 应用程序的性能”

于 2012-07-12T11:06:11.110 回答
0

尝试在您的 AndroidManifest.xml 中设置此标志:android:hardwareAccelerated="true"

于 2012-07-12T11:08:03.817 回答
0

更新:现在使用 ST2 的时间更长了,Android 上的性能挑战只是你必须接受的事情。您可以采取许多措施来避免性能问题,例如减少侦听器和事件、保持 DOM 轻量级(低于 2000 个节点)以及通常避免任何 CSS3 转换和效果(尤其是这些在 Android 上表现不佳)

要考虑的另一件事是,您可以使用 CrossWalk 浏览器并将其嵌入到 APK 中,而不是使用内置的 WebView。

https://crosswalk-project.org

它为您的 APK 增加了一点大小(15-20MB),但它的性能比内置的 WebView 更好,并为非常分散的平台带来了稳定性和一致性。考虑一个现实,Android 上的每个 WebView 取决于设备、供应商和操作系统版本可能在细微的方面有所不同。CrossWalk 将允许您在所有 Android 4.0+ 设备上拥有完全相同的版本,并消除任何设备或供应商特定的问题。

Android 上的性能没有灵丹妙药。图形加速不会提高纯 javascript 执行或 DOM 操作的性能。如果您想了解原因,请从这里开始:

回流和重绘有什么区别?

Older Answer (may still be valid):

For ICS and above the following setting on the webview will significantly improve rendering performance for Sencha Touch on Android:

mWebView.setLayerType(WebView.LAYER_TYPE_HARDWARE, null);

However in my experience this will introduce artifacts into CSS rendering depending on the device and platform variation. I haven't specifically found a reason for this and I don't expect Google will resolve it as the webview component will be getting replaced with a newer and better version in Android 4.4.

https://developers.google.com/chrome/mobile/docs/webview/overview

于 2014-03-13T15:29:59.577 回答