android - 将 PhoneGap iOS 应用程序迁移到 Android - 遇到严重的性能问题

标签 android cordova kendo-ui

几个月来,我们一直在使用 Telerik 的 PhoneGap 1.8.1 和 Kendo UI 开发一个相当重要的 iOS 应用程序。我会说 iOS 应用程序的速度大约是其原生应用程序的 90%,这对我们来说是完全可以接受的。我们采用完全相同的代码库并替换为 Android 等效的 javascript 文件,启动我们的设备(运行 4.0.3 的摩托罗拉 Xoom),性能非常糟糕。最糟糕的是页面转换——可能需要 0.3 秒——需要 2-5 秒。在模拟器上的性能即使不差也一样(不足为奇)。

如果我可以发布有用的代码,请告诉我。否则我想我们正在寻找遇到这种情况的其他人和/或性能改进建议。在这一点上,PhoneGap 对我们来说完全不是 Android 开发的启动器。

最佳答案

我们使用 Sencha Touch 2 进行了一些跨平台移动开发(没有使用 Kendo UI 的经验)。上次我详细研究性能时,Sencha Touch 2 是全功能/成熟的跨平台移动框架(Jquery Mobile、Kendo UI 等)中性能最好的。我们的经验是 Android 上的性能比 iOS 慢得多(尽管 Sencha Touch 2 被认为有点快)。滚动列表、屏幕转换等都低于标准。我对性能差异感到相当震惊。 Android 性能在我运行 4.0 的 Galaxy Nexus 上更好,但仍然明显慢于 iOS 设备。

不幸的是,我没有找到一种方法让您的应用在 Android 上执行与在 iOS 上相同的操作。这是我不久前遇到的不幸现实。您看到的问题是由于浏览器在不同平台上的性能所致; phonegap 仅使用 UIWebView 和 WebView 将 html 和 javascript 页面加载到 native 应用程序包装器中。您可以在设备的浏览器中加载 Kendo UI 应用程序吗?我假设性能与原生包装的应用程序相同。

我们的“解决方案”是首先针对 Android 进行开发,然后让应用程序达到正常运行的程度。然后我们知道它们在 iOS 设备上会很棒。

我对 Kendo UI 不是很熟悉,但就建议或调整而言,我们会尽可能少地保留在 DOM 中。当应用程序启动时,我们在 DOM 中创建尽可能少的内容,然后在应用程序需要时创建/销毁对象。此外,仅对 javascript 进行一般优化也有帮助。

我认为这是这些移动框架的一个肮脏的小 secret 。当你向他们询问这件事时,他们的回答是 Android 浏览器性能很慢,所以应用程序会很慢。 IE。 “不是我们的错”,但他们继续描绘一个适用于所有平台的框架。

对我们来说,Sencha Touch 2 足够快,可以为我们的用户在 Android 设备上提供良好的体验,因此与为每个平台开发本地应用程序相比,节省大量时间是值得的。

澄清一下,您看到的性能问题可能与 PhoneGap 无关,而是浏览器在设备上的性能问题。 PhoneGap 本质上只是将 WebView 包装在 native 应用程序包装器中。当同时使用 PhoneGap 和 Sencha Touch native 打包时,我们已经看到了 Android 上的性能问题。

关于android - 将 PhoneGap iOS 应用程序迁移到 Android - 遇到严重的性能问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11191819/

相关文章:

android - 如何在日历卡库中获取选定的日期?

android - 在 Android 中从 AppEngine 服务器获取图像的最佳方式(Blob 与 URL)

android - 基本网络.performRequest : Unexpected response code 500 for

cordova - IFrame 滚动无法通过phonegap 在 ios 应用程序中工作

java - Android 手机不转储堆栈跟踪

javascript - 检查 GPS cordova 插件诊断 XML.config

Facebook Connect oauth 重定向 ionic 框架/cordova 上混合应用程序的 URI URL

jquery - Kendo DatePicker 返回错误值

kendo-ui - htmlhelper 不包含 ASP.NET MVC RAZOR 中剑道的定义

kendo-ui - 剑道用户界面 : How to avoid server call when text entered in combobox is less than min length