Rendimiento Android alcanzado en versiones posteriores a 2.3.5 (phonegap / cordova)

Actualmente estoy desarrollando una aplicación Android con Phonegap / Cordova (2.1.0 / 2.2.0), JQ-Mobi (no jQueryMobile), HTML5 y Javascript y CSS3. La aplicación contiene 2 exstensions nativos.

De alguna manera, cuando exporte mi proyecto a un dispositivo con la versión Android más reciente, la aplicación se ejecuta mucho más lento que un dispositivo 2.3.5.

He intentado habilitar el HardwareAcceleration y eliminado todas las sombras de caja y otros difíciles de procesar css3 cosas. Todavía en un 4.1.1 o 4.0.4 funciona crappy.

También he actualizado a la última versión de Cordova (ahora 2.2.0) y no parece hacerlo mejor.

La manipulación DOM de JavaScript ocurre alrededor del 80-90% cuando se inicia la aplicación.

El peor desempeño es el cambio de paneles y desplazamiento a través de formas, la mayoría de ellos tienen algunas transiciones en ellos. Lo probé en un Samsung Galaxy S2 android 2.3.5 y se ve bien y funciona bien. El mismo dispositivo, pero 4.0.4 funciona crappy. Samsung Galaxy S3 4.1.1 funciona incluso crappier. HTC Flyer P512 con android 3.2.1 lo ejecuta como debería estar ejecutándose.

¿Puede alguien ayudarme aquí? ¿Cómo obtengo este rendimiento? Cualquier sugerencia o consejos que no he mencionado?

Me gustaría añadir que no tengo los problemas en un Iphone 3gs y hasta explicar que es sin duda un problema de Android.

Mis aplicaciones de teléfono funcionan sin problemas en iOS, pero funcionan muy mal en Android. Según entiendo, esto es sólo porque Android es mucho más lento en la interpretación de JavaScript que iOS.

Una cosa que puede ayudar mucho es reducir el uso de bibliotecas como jQuery y JQM. Si desea incluirlos, no los use donde no tenga que hacerlo.

funciones como jQuery.animate ejecutar notoriamente lento en Android y que sería mejor de la iteración de matrices con JS crudo en lugar de utilizar jQuery.each etc, etc

El problema no es sólo con la representación gráfica, sino con la velocidad a la que se ejecuta JavaScript. Aunque disminuir la resolución de la pantalla puede aumentar su rendimiento.

Editar

Estoy tratando de llegar al fondo de este yo y la única respuesta que puedo obtener es mantener las operaciones computacionales en un mínimo.

  • Utilice las bibliotecas con moderación y resuelva sus problemas con código escrito en bruto y bien escrito cuando sea posible
  • Mantenga un pequeño DOM y manipularlo lo menos posible
  • Hacer uso de las técnicas de mejora del rendimiento de JavaScript

Por lo que realmente parece que este es un problema de rendimiento principal, en lugar de algo que podría resolverse en la capa Phonegap. Como un ejemplo no científico, la misma función init () en una de mis aplicaciones se ejecuta en aproximadamente 1,2 segundos en el iPhone 4 en promedio, mientras que tomar un lento 5 segundos para completar en mi samsung galaxia s3.

El núcleo del problema es que todo se carga y se ejecuta en una sola página (contexto de ejecución), personalmente, aunque las aplicaciones de una sola página (sencha, jqmobile etc) son toda la rabia, el rendimiento en los dispositivos modernos no hace la experiencia del usuario cualquier justicia. Separaría la aplicación en diferentes páginas, esto reducirá significativamente el tamaño del DOM y creará contextos de ejecución separados para cada nueva página, lo que significa que su página principal (contexto de ejecución) es agradable y delgada (DOM es pequeño).

Tuve exactamente el mismo problema. Le hice una pregunta similar y finalmente la respondí aquí después de una tonelada de investigación:

Cordova / Phonegap lenta rendimiento con las capas abiertas en la nueva tableta, pero bien en el nuevo teléfono

No voy a repetir la respuesta completa que di, pero el rendimiento lento en algunas versiones de Android se debe a lo que es esencialmente un error en WebView que estrangula el soporte de la CPU para los procesos basados ​​en GPU, pero no proporciona soporte de GPU para compensar.

Kitkat V4.4.3 tiene esta versión fija, pero las versiones anteriores, como V4.4.2 que todavía se utilizan en algunos dispositivos todavía sufren.

Puede evitar esto no utilizando WebView en absoluto para la representación HTML y, en su lugar, usar Crosswalk. Para nuestro proyecto esto resolvió el problema por completo y ahora tenemos una aplicación que funciona correctamente en todas las versiones de Android que estamos enfocando. Es muy trivial hacerlo también.

https://crosswalk-project.org/documentation/cordova.html

https://blog.nraboy.com/2014/10/use-crosswalk-ionic-framework-android-apps/

Trate de utilizar el procesamiento multihilo y de fondo para operaciones extensas de recursos.

Eso funcionó para mí cuando tuve un problema similar con una de mis aplicaciones cuando se bloquea cuando se ejecuta en versiones posteriores a la 2.3.3. Nunca trabajé con PhoneGap por lo que no estoy seguro de cómo va a hacerlo.

  • Anidado recylerview lag mientras que los primeros rollos y luego se desplaza suavemente?
  • Cómo configurar el color de fondo para Textview de forma programática para otro archivo xml?
  • Cómo mejorar el rendimiento de ViewFlipper / ViewAnimator
  • Reserva de almacenamiento interno del dispositivo Android para futuros registros críticos de aplicaciones
  • Android - ListView con imágenes se desplaza demasiado lento incluso sin ningún procesamiento en el método getView del adaptador
  • Android: ¿Hay alguna manera de acelerar canvas.drawBitmap?
  • Desventajas en Multidexing la aplicación de Android
  • ¿Por qué Google utiliza Canvas en la vista de la lista de conversaciones de aplicaciones de Gmail?
  • La aplicación de Android comienza muy lentamente en el primer lanzamiento, pero normalmente en los próximos lanzamientos
  • Cuál es la ventaja de usar el espacio sobre la vista
  • Android, cálculo del hash SHA-1 desde el archivo, el algoritmo más rápido
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.