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
Ответ 3
Нашел ответ здесь: http://groups.google.com/group/phonegap/browse_thread/thread/94da1cf881abe995/6d4f7aea7aeba523?lnk=gst&q=performance
Вероятно, существует разница между собственным браузером и веб-просмотром с точки зрения производительности javascript.
Ответ 4
Если вы можете подтвердить, что браузер работает лучше (что это не что-то субоптимальное в вашем коде, которое расстраивает одно, а не другое), вы можете рассмотреть возможность развертывания в качестве автономного приложения html5, чтобы вы действительно запускались в браузере.
Ответ 5
Мы столкнулись с проблемами производительности, прокручивая одинаковое количество элементов списка с помощью jquery mobile. Производительность была настолько плохой (мы даже не пытались в среде PhoneGap), что мы переписали приложение с помощью библиотеки iScroll... теперь приложение прокручивается очень плавно.
Если вы находитесь в начале разработки, вы можете попробовать изменить библиотеку пользовательского интерфейса.
После этой ситуации мы развертываем наши приложения для тестирования устройств довольно часто, чтобы своевременно управлять проблемами производительности... это стало "политикой":)