为什么PhoneGap比浏览器慢?

20

我正在Android上通过PhoneGap和内置浏览器运行同样的Web应用程序。该应用程序在内置浏览器上运行良好,但在PhoneGap下则明显变慢。甚至在页面上进行基本滚动也会出现卡顿。

总的来说,我可能做错了什么?我认为PhoneGap只是使用与普通浏览器应用程序相同的WebKit渲染器,那么为什么相同的HTML和JavaScript在PhoneGap中运行速度会慢得多呢?

P.S. 这个问题之前已经有人提问过,但由于措辞不当,我认为原始问题被误解了。


遇到同样的问题!Phonegap build 有解决方案吗? - byJeevan
4个回答

15

我可能无意中找到了这个问题的答案。原来我正在开发的应用程序在AndroidManifest.xml中设置了一个非常低的android:targetSdkVersion值 (即我的目标 Android 版本大约是 2.2)。将其增加到14(Android 4.0)似乎极大地提高了 PhoneGap 的性能,至少在运行 ICS 或 Jelly Bean 的新版本 Android 设备上。

设置较低的targetSdkVersion似乎会禁用某些较新版本 Android 引入的性能改进。

因此,如果你想在 PhoneGap 中获得显著的性能提升,请确保你的targetSdkVersion与你测试的手机所支持的最大 SDK 版本匹配。


7

我不太了解PhoneGap,但您可以尝试以下方法:

  • 在清单中添加android:hardwareAccelerated="true"
  • 如果您使用WebView,则可以设置webview.getSettings().setRenderPriority(RenderPriority.HIGH);webview.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);

有没有标签可以添加这个/这些? - Lekhnath
1
<application android:hardwareAccelerated="true" 确实解决了我遇到的滚动卡顿问题。 - jwinn

2

与直觉相反,您可能需要关闭Webview的硬件加速。自Android 4.0.4以来,硬件加速对画布和其他重绘事件没有任何作用,而实际上会为这些事件释放CPU资源。

尝试在应用程序Java文件中添加以下代码:

super.setLayerType(View.LAYER_TYPE_SOFTWARE, null);

同时在清单文件中设置android:hardwareAccelerated="false"。


这解决了我的一些渲染问题并加速了我的应用程序。很奇怪。 - TWilly
请您能否提供更多细节? - Sebastien Lorber

0

我经历了完全相同的事情!之前我使用Android 3.x进行测试。一旦我升级到4.4.2,我的画布就变得非常缓慢!查看渲染时间轴,我可以看到许多光栅化调用超过100毫秒,并将我的FPS降至约8!android:hardwareAccelerated="false"解决了我的问题。是否有一种方法可以根据Android版本设置hardwareAccelerated="true"?


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