Производительность Android достигла более поздних версий, чем 2.3.5 (phonegap/cordova)
В настоящее время я разрабатываю приложение для Android с Phonegap/Cordova (2.1.0/2.2.0), JQ-Mobi (не jQueryMobile), HTML5 и Javascript и CSS3. Приложение содержит 2 собственных exstensions.
Как-то, когда я экспортирую свой проект на устройство с последней версией Android, приложение работает намного медленнее, чем устройство 2.3.5.
Я попытался включить HardwareAcceleration и удалил все тенеры и другие жесткие для рендеринга css3. Все еще на 4.1.1 или 4.0.4 он работает crappy.
Я также обновил до последней версии Кордовы (теперь 2.2.0), и, похоже, она не улучшилась.
Работа с DOM-манипуляциями Javascript происходит примерно на 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.
Ответы
Ответ 1
Мои приложения для телефонных разговоров работают плавно на iOS, но очень плохо работают на Android. Насколько я понимаю, это связано с тем, что Android гораздо медленнее интерпретирует JavaScript, чем iOS.
Одна вещь, которая может многое помочь, - это сокращение использования библиотек, таких как jQuery и JQM. Если вы хотите включить их, не используйте их там, где вам не нужно.
функции, такие как jQuery.animate, запускаются на Android медленнее, и вы лучше выполняете итерацию по массивам с помощью raw JS, а не с помощью jQuery.each и т.д. и т.д.
Проблема заключается не только в графическом рендеринге, но и со скоростью, с которой выполняется JavaScript. Хотя снижение разрешения экрана может повысить вашу производительность.
Edit
Я пытаюсь разобраться в этом сам, и единственный ответ, который я могу получить, заключается в том, чтобы поддерживать вычислительные операции на минимальном уровне.
- Использовать библиотеки экономно и решить свои проблемы с использованием сырого и хорошо написанного JavaScript, если это возможно.
- Храните небольшой DOM и управляйте им как можно реже.
- Использовать методы повышения производительности JavaScript
Поэтому действительно кажется, что это основная проблема с производительностью, а не то, что можно было бы решить на уровне Phonegap. В качестве ненаучного примера одна и та же функция init() на одном из моих приложений выполняется в среднем примерно 1,2 секунды в iPhone 4s, в то время как в моей галактике s3 s3 s3 происходит вялое 5 секунд.
Ответ 2
Ядро проблемы состоит в том, что все загружается и запускается на одной странице (контексте выполнения) лично, хотя приложения с одной страницей (sencha, jqmobile и т.д.) - все это ярость, производительность на современных устройствах не делает пользователь испытывает любое правосудие. Я бы отделил приложение на разные страницы, это значительно уменьшит размер DOM и создаст отдельные контексты выполнения для каждой новой страницы, что означает, что ваша главная страница (контекст выполнения) приятная и худая (DOM - малая).
Ответ 3
У меня была такая же проблема. Я задал аналогичный вопрос и, в конце концов, сам ответил здесь после тонны исследований:
Кордова/медленная работа с телефонной связью с Open Layers на новом планшете, но отлично подходит для нового телефона
Я не буду повторять весь ответ, который я дал, но медленная производительность некоторых версий Android связана с тем, что по сути является ошибкой в WebView, которая дросселирует поддержку ЦП для процессов на основе GPU, но не обеспечивает поддержку 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/
Ответ 4
Попробуйте использовать многопоточную и фоновую обработку для расширенных операций ресурсов.
Это сработало для меня, когда у меня была аналогичная проблема с одним из моих приложений, когда он сбой, когда он работает в версиях позже 2.3.3. Я никогда не работал с PhoneGap, поэтому я не уверен, как вы собираетесь это делать.