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.
- Android ORMLite crear objeto lento
- ¿Cuál es el mejor lenguaje para la programación gráfica en tiempo real en Android?
- ¿Cómo probar el rendimiento de una aplicación de Android?
- Android desplácese hacia arriba ocultar vista y desplácese hacia abajo mostrar el efecto de vista como twitter
- ¿Cómo mterp (Dalvik VM) organiza su bucle de interpretación de bytes?
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.
- Cómo mejorar el rendimiento de JS menú arrastrar en WebView en Android
- ¿Cómo ahorrar una matriz larga como números hexadecimales inversos más rápido?
- Apache Commons NET: ¿Debo crear un nuevo objeto FTPClient en cada conexión o reutilizar uno?
- Inicialización perezosa de los kits de tela?
- ¿Qué significa MediaPlayer info / warning (973, 0)?
- No se puede abrir el archivo open_gapps-arm-6.0-stock-20160220 en genymotion?
- ¿Cuándo debe y no debe romperse de OOP para velocidad / rendimiento?
- ¿Cuál es la mejor alternativa para las preferencias compartidas en 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.
- com.android.volley.NoConnectionError – Emulador de Android con Charles Proxy
- Utilizar CursorLoader para consultar la base de datos SQLite y rellenar AutoCompleteTextView