В настоящее время я разрабатываю приложение для Android с Phonegap / Cordova (2.1.0 / 2.2.0), JQ-Mobi (не jQueryMobile), HTML5 и Javascript и CSS3. Приложение содержит 2 родных выражения.
Так или иначе, когда я экспортирую свой проект на устройство с последней версией Android, приложение работает намного медленнее, чем устройство 2.3.5.
Я попытался включить HardwareAcceleration и удалил все теней и другие жесткие, чтобы отобразить css3. Все еще на 4.1.1 или 4.0.4 он работает crappy.
Я также обновил до последней версии Кордовы (теперь 2.2.0), и, похоже, она не улучшилась.
Работа с Javascript DOM происходит примерно на 80-90% при запуске приложения.
Худшая производительность заключается в переключении панелей и прокрутке форм, большинство из них имеют некоторые переходы в них. Я тестировал его на Samsung Galaxy S2 android 2.3.5, и он выглядит хорошо и хорошо работает. Это же устройство, но 4.0.4 работает crappy. Samsung Galaxy S3 4.1.1 работает даже crappier. HTC Flyer P512 с android 3.2.1 запускает его, как он должен работать.
Может кто-нибудь помочь мне здесь? Как мне повысить производительность? Любой подсказку или подсказки, которые я не упомянул?
Я хотел бы добавить, что я не получаю проблемы с Iphone 3gs и объясню, что это определенно проблема с Android.
Мои приложения для телефонного разговора работают плавно на iOS, но очень плохо работают на Android. Насколько я понимаю, это связано с тем, что Android гораздо медленнее интерпретирует JavaScript, чем iOS.
Одна вещь, которая может многое помочь, – это сокращение использования библиотек, таких как jQuery и JQM. Если вы хотите включить их, не используйте их там, где вам не нужно.
Такие функции, как jQuery.animate, заведомо замедляют работу на Android, и вам лучше будет перебирать массивы с помощью raw JS, а не использовать jQuery.each и т. Д.
Проблема заключается не только в графическом рендеринге, но и со скоростью, с которой выполняется JavaScript. Хотя снижение разрешения экрана может повысить вашу производительность.
редактировать
Я пытаюсь разобраться в этом сам, и единственный ответ, который я могу получить, заключается в том, чтобы поддерживать вычислительные операции на минимальном уровне.
Поэтому действительно кажется, что это основная проблема производительности, а не что-то, что можно решить на уровне Phonegap. В качестве ненаучного примера одна и та же функция init () на одном из моих приложений выполняется в среднем примерно 1,2 секунды в iPhone 4s, в то время как в моей галактике s3 s3 s вступает вялая 5 секунд.
Ядро проблемы заключается в том, что все загружается и запускается на одной странице (контекст выполнения) лично, хотя приложения с одной страницей (sencha, jqmobile и т. Д.) – все это ярость, производительность на современных устройствах не влияет на пользователя справедливость. Я бы отделил приложение на разные страницы, это значительно уменьшит размер DOM и создаст отдельные контексты выполнения для каждой новой страницы, что означает, что ваша главная страница (контекст выполнения) хороша и тощая (DOM мала).
У меня была точно такая же проблема. Я задал подобный вопрос и, в конце концов, сам ответил здесь после тонны исследований:
Кордова / медленная работа Phonegap с Open Layers на новом планшете, но отлично работает на новом телефоне
Я не буду повторять весь ответ, который я дал, но медленная производительность на некоторых версиях Android связана с тем, что по сути является ошибкой в WebView, которая дросселирует поддержку ЦП для процессов на основе GPU, но не обеспечивает поддержку графического процессора для компенсации.
У Kitkat V4.4.3 вверх эти фиксированные, но более старые версии, такие как V4.4.2, которые все еще используются на некоторых устройствах, по-прежнему страдают.
Вы можете избежать этого, не используя WebView вообще для рендеринга HTML, и вместо этого используйте Crosswalk. Для нашего проекта это полностью решило проблему, и теперь у нас есть плавное приложение для всех Android-версий, на которые мы нацеливаемся. Это довольно тривиально.
https://crosswalk-project.org/documentation/cordova.html
https://blog.nraboy.com/2014/10/use-crosswalk-ionic-framework-android-apps/
Попробуйте использовать многопоточность и фоновую обработку для обширных операций ресурсов.
Это сработало для меня, когда у меня была аналогичная проблема с одним из моих приложений, когда он сбой, когда он запускается в версиях позже 2.3.3. Я никогда не работал с PhoneGap, поэтому я не уверен, как вы собираетесь это делать.