PhoneGap - Плохая производительность по сравнению с браузером на Android

Я разработал приложение для Android, используя jQuery mobile и phonegap. Я развернул приложение на своем устройстве через USB. Производительность приложения очень плохая, особенно при прокрутке более длинного списка.

Странная вещь: все приложение работает гладко, если я просто открываю браузер на своем телефоне и напрямую обращаюсь к index.html. Та же технология, тот же контент. Я не использую nativegap-род api или что-то подобное.

Протестировано с помощью телефонных разговоров 1.5.0 и 1.7.0rc1, jquery mobile 1.1.0 на Android 4.0.2.

Любые идеи?

Ответ 1

На сотовых (3.0), мороженых (4.0) и задних устройствах вы можете повысить производительность, добавив следующее в < Приложение... > :

android:hardwareAccelerated="true"

Вы можете установить minSdk на 8 (Android 2.2) для совместимости, а targetSdk - на 15 (Android 4.0), что сделает аппаратное ускорение работать, когда оно доступно только на устройстве.

Я считаю, что с этим флагом производительность моих приложений равна запуску их в браузере, поэтому я предполагаю, что это потому, что браузер был закодирован с аппаратным ускорением:)

Ответ 2

У меня была аналогичная проблема: страница с более длинным списком "средних сложных" тематических div. Браузеру телефона HTC не было проблем с отображением. Но в результате полного удаления приложения Phonegap ничего не произошло. Я видел вид WSOD, который исчез только после касания дисплея. После касания страница была правильно отображена.

Проблема не была на месте, когда я сократил div-список до одного или двух div-элементов или когда я уменьшил вспомогательные элементы в div и уменьшил усилие рендеринга, вызванное сложностью css.

Белый экран выглядел так, будто все тело было невидимым, поскольку отображался только цвет фона документов (для этого я добавил светло-розовый). Таким образом, я думаю, рендеринг был проблемой после прочтения этого потока

Я попробовал различные предложения, которые я нашел в этом потоке, чтобы приложение работало без "WSOD". Но ничего не получилось. Некоторые из них сделали приложение хуже.

Наконец, после целого дня поиска я сделал это. Я установил внутри тега (а не тег) моего AndroidManifest
<application android:hardwareAccelerated="false" ...

Теперь приложение ведет себя так же быстро, как мой веб-браузер. Похоже, если аппаратное ускорение не всегда является лучшей функцией...

Мои версии: phonegap 3.5.0, Android 4.0.3, jQuery v2.1.0, HTC Sense 3.6

Ответ 4

Если вы можете подтвердить, что браузер работает лучше (что это не что-то субоптимальное в вашем коде, которое расстраивает одно, а не другое), вы можете рассмотреть возможность развертывания в качестве автономного приложения html5, чтобы вы действительно запускались в браузере.

Ответ 5

Мы столкнулись с проблемами производительности, прокручивая одинаковое количество элементов списка с помощью jquery mobile. Производительность была настолько плохой (мы даже не пытались в среде PhoneGap), что мы переписали приложение с помощью библиотеки iScroll... теперь приложение прокручивается очень плавно.

Если вы находитесь в начале разработки, вы можете попробовать изменить библиотеку пользовательского интерфейса.

После этой ситуации мы развертываем наши приложения для тестирования устройств довольно часто, чтобы своевременно управлять проблемами производительности... это стало "политикой":)