Почему PhoneGap работает медленнее, чем браузер?
Я запускаю то же самое точное веб-приложение на Android под PhoneGap и под встроенным браузером. Приложение прекрасно работает во встроенном браузере, но невероятно медленным при использовании PhoneGap. Даже базовая прокрутка на странице заикается под PhoneGap.
Есть ли вообще что-то, что я могу ошибаться? У меня создалось впечатление, что PhoneGap просто использует тот же рендер WebKit, что и обычное приложение для браузера, так почему же один и тот же HTML и JavaScript выполняются намного медленнее внутри PhoneGap?
P.S. Это было перед, но из-за формулировки я думаю, что исходный вопрос был неправильно понят.
Ответы
Ответ 1
Возможно, я случайно наткнулся на ответ на этот вопрос. Оказывается, что приложения, над которыми я работал, имели android:targetSdkVersion
в AndoroidManifest.xml
, установленное на действительно низкое значение (т.е. Моя целевая версия Android была чем-то вроде 2.2). Увеличение этого показателя до 14
(Android 4.0), по-видимому, значительно улучшило производительность PhoneGap, по крайней мере, на новых Android-устройствах, работающих под управлением ICS или Jelly Bean.
Установка низкого targetSdkVersion
, по-видимому, отключает хотя бы некоторые улучшения производительности, появившиеся в новых версиях Android.
Итак, если вы хотите увеличить производительность в PhoneGap, убедитесь, что ваш targetSdkVersion
соответствует максимальной версии SDK, поддерживаемой телефоном, на котором вы тестируете.
Ответ 2
Я не знаю phoneGap, но вы можете попробовать:
- Добавление
android:hardwareAccelerated="true"
в манифест
- Если вы используете webview
webview.getSettings().setRenderPriority(RenderPriority.HIGH);
и webview.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
Ответ 3
Он интуитивно понятен, но на самом деле вам может потребоваться отключить аппаратное ускорение для вашего веб-просмотра. Аппаратное ускорение с Android 4.0.4 ничего не делает для холста и других событий перерисовывания, но фактически удаляет ресурсы ЦП для этих событий.
Попробуйте добавить эту строку кода в свой Java файл приложения:
super.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
Также установите android: hardwareAccelerated = "false" в манифесте.
Ответ 4
То же самое, что я испытал! Раньше я использовал Android 3.x для тестирования. Как только я обновился до 4.4.2, мой Холст был мертв медленно! Глядя на временную шкалу рендеринга, я мог видеть, что многие вызовы Rasterization занимают более 100 мс и уменьшают мой FPS до 8! android: hardwareAccelerated = "false" решил мои проблемы. Есть ли способ установить hardwareAccelerated = "true" в зависимости от версии Android?