15

目前,我正在使用 Phonegap/Cordova (2.1.0/2.2.0)、JQ-Mobi(不是 jQueryMobile)、HTML5 和 Javascript 和 CSS3 开发 Android 应用程序。该应用程序包含 2 个本机扩展。

不知何故,当我将我的项目导出到具有最新 Android 版本的设备时,该应用程序的运行速度比 2.3.5 设备慢得多。

我已经尝试启用 HardwareAcceleration 并删除了所有的盒子阴影和其他难以呈现 css3 的东西。仍然在 4.1.1 或 4.0.4 上运行很糟糕。

我还升级到了最新版本的 Cordova(现在是 2.2.0),但它似乎并没有变得更好。

Javascript DOM 操作在应用程序启动时发生约 80-90%。

最差的表现是在切换面板和滚动表单时,其中大多数都有一些过渡。我在三星 Galaxy S2 android 2.3.5 上对其进行了测试,它看起来不错并且性能良好。相同的设备,但 4.0.4 运行糟糕。三星 Galaxy S3 4.1.1 运行更糟糕。带有 android 3.2.1 的 HTC Flyer P512 运行它应该如何运行。

有谁可以帮我离开这里吗?我如何才能提高这种性能?我没有提到的任何提示或提示?

我想补充一点,我没有在 Iphone 3gs 及以上版本上遇到问题,以解释这绝对是 Android 问题。

4

4 回答 4

2

我的 phonegap 应用程序在 iOS 上运行流畅,但在 Android 上表现极差。据我了解,这只是因为 Android 在解释 JavaScript 方面比 iOS 慢得多。

可以有很大帮助的一件事是减少对 jQuery 和 JQM 等库的使用。如果您想包含它们,请不要在不必要的地方使用它们。

jQuery.animate 之类的函数在 Android 上的运行速度非常慢,您最好使用原始 JS 迭代数组,而不是使用 jQuery.each 等。

问题不仅在于图形渲染,还在于 JavaScript 的执行速度。尽管降低屏幕分辨率可以提高您的性能。

编辑

我自己试图深入了解这一点,我能得到的唯一答案是将计算操作保持在最低限度。

  • 谨慎使用库,并尽可能使用原始且编写良好的 JavaScript 来解决您的问题
  • 保持一个小的 DOM 并尽可能少地操作它
  • 利用 JavaScript 性能增强技术

所以看起来这确实是一个核心性能问题,而不是可以在 Phonegap 层解决的问题。举一个非科学的例子,我的一个应用程序上完全相同的 init() 函数在 iPhone 4s 上执行的平均时间约为 1.2 秒,而在我的三星 Galaxy S3 上则需要缓慢的 5 秒才能完成。

于 2012-11-19T15:06:40.890 回答
1

我有同样的问题。我问了一个类似的问题,经过大量研究后,我最终在这里自己回答了这个问题:

Cordova/Phonegap 在新平板电脑上使用 Open Layers 性能缓慢,但在新手机上很好

我不会重复我给出的整个答案,但某些 Android 版本的性能缓慢是由于 WebView 中的一个错误,它限制了基于 GPU 的进程的 CPU 支持,但不提供 GPU 支持来补偿。

Kitkat V4.4.3 以上已修复此问题,但仍在某些设备上使用的旧版本(例如 V4.4.2)仍然受到影响。

您可以通过完全不使用 WebView 进行 HTML 呈现来避免这种情况,而是使用 Crosswalk。对于我们的项目,这完全解决了问题,我们现在可以在所有目标 Android 版本上顺利运行应用程序。做起来也很简单。

https://crosswalk-project.org/documentation/cordova.html

https://blog.nraboy.com/2014/10/use-crosswalk-ionic-framework-android-apps/

于 2015-01-14T11:16:13.590 回答
1

问题的核心是所有内容都在单个页面(执行上下文)中加载和运行,就个人而言,尽管单页面应用程序(sencha、jqmobile 等)风靡一时,但现代设备上的性能对用户体验没有任何影响正义。我会将应用程序分成不同的页面,这将显着减小 DOM 的大小并为每个新页面创建单独的执行上下文,这意味着您的主页(执行上下文)很好且精简(DOM 很小)。

于 2012-11-22T01:47:49.023 回答
0

尝试使用多线程和后台处理来进行资源广泛的操作。

当我的一个应用程序在高于 2.3.3 的版本上运行时崩溃时,我遇到了类似的问题,这对我有用。我从未与 PhoneGap 合作过,所以我不确定你将如何做。

于 2012-11-18T09:39:44.883 回答