2012-07-12 11 views
6

Estamos desarrollando una aplicación Sencha Touch 2 que hace uso de Phonegap para poder instalarlo como una aplicación y acceder al almacenamiento de un dispositivo. Esto funciona muy bien en el iPad 2 y el iPad 3. Sin embargo, cuando tratamos de ejecutar la aplicación en un dispositivo Android, el rendimiento fue muy lento. Los principales elementos que ralentizaron el sistema fueron listas y carruseles. Cuando intentamos probar la misma aplicación a través del navegador Chrome, el rendimiento fue a la par con el del iPad.Sencha Touch 2 - Android Performance

¿Tiene alguna sugerencia sobre qué podemos hacer para mejorar el rendimiento en Android, tal vez incluso abandonando Phonegap por algo que funciona mejor? O si podemos forzar que phonegap se ejecute como un navegador Chrome.

Gracias por su tiempo & ayuda.

+0

See. También estoy usando phonegap y sencha. Pero hasta ahora no tuve muchos problemas en términos de rendimiento. Puede ser que sea un poco lento para algunas características nativas como el escaneo de códigos de barras y todo. Pero no mucho. Sugeriré usar el último archivo corodova.jar. Puede ser 1.8 o 1.9 –

+0

De hecho, estamos usando la versión 1.9 de Cordova pero el rendimiento no es bueno. Tengo que mencionar que no lo estamos desarrollando como una aplicación MVC porque este fue nuestro primer proyecto que usó Sencha, por lo que también debe estar afectando el rendimiento. Mucha gente menciona que la raíz del problema es la Vista Web de Android, en la que funciona Phonegap, aparentemente no es buena para sitios pesados. – user1520547

+0

Pero estoy usando MVC architechture. Así que la parte UI, estoy haciendo uso de Sencha Touch 2 y parte nativa usando phonegap. Pero hasta ahora, en cuanto al rendimiento, es bueno. –

Respuesta

12

El problema que tiene aquí es que el navegador de Android no utiliza la aceleración de hardware de gráficos. Esto significa que los trucos estándar que Sencha (y otras bibliotecas HTML5 como jQueryMobile, iScroll, etc.) utilizan para proporcionar un buen rendimiento de desplazamiento, como CSS 3D se transforma para hacer que su lista se represente en una capa separada, que puede luego se traducirá en hardware, no funcionará en Android. En cambio, la lista de desplazamiento se realizará completamente en el software, ¡que será lento!

El navegador Chrome, sin embargo, proporciona la aceleración de la GPU. El dispositivo Android es más que capaz de ofrecer una buena experiencia HTML5, es simplemente que el navegador estándar aún no aprovecha el hardware de la GPU.

A menos que pueda obligar a sus usuarios finales a usar Chrome (lo cual dudo), la única opción es degradar la experiencia del usuario y ofrecer una interfaz de usuario ligeramente más simple para los usuarios de Android.

Para más detalles, véase "IMPROVING THE PERFORMANCE OF YOUR HTML5 APP"

+0

Eso explica exactamente cuál es el problema aquí, gracias. No, como ya adivinó, no podemos obligar a los usuarios a usar Chrome porque necesitamos almacenar más de 5 MB de datos para la aplicación, y por lo tanto, el almacenamiento local no sería suficiente. Echaré un vistazo al enlace que proporcionó, tal vez podamos sacrificar un poco de atractivo visual para mejorar el rendimiento – user1520547

0

intente configurar esta bandera en su AndroidManifest.xml: androide: hardwareAccelerated = "true"

+0

Ya lo intenté pero parece que no funciona, el rendimiento fue exactamente el mismo cuando la opción se configuró como falsa. También intenté establecer el objetivo SDK en 15 (4.0.3) pero aún no sirvió para nada – user1520547

0

Actualización: Habiendo trabajado con más ST2 ya ahora el desempeño los desafíos en Android son solo algo que debes aceptar. Hay muchas cosas que puede hacer para evitar problemas de rendimiento, como reducir los oyentes y los eventos, mantener la luz DOM (por debajo de 2000 nodos) y evitar las transformaciones y los efectos de CSS3 (estos no funcionan bien en Android)

Otra cosa a tener en cuenta es que en lugar de usar el WebView incorporado, podría usar el navegador CrossWalk e incrustarlo en APK.

https://crosswalk-project.org

Se añade un poco de tamaño a su APK (15-20MB), pero se comporta mejor que el construido en WebView y aporta estabilidad y consistencia a una plataforma muy fragmentado. Considere la realidad de que cada WebView en Android según el dispositivo, el proveedor y la versión del sistema operativo pueden ser diferentes en pequeñas formas. CrossWalk le permitirá tener la misma versión exacta en todos los dispositivos con Android 4.0+ y eliminar cualquier problema específico del dispositivo o del proveedor.

No hay una bala de plata para el rendimiento en Android. La aceleración de gráficos no mejorará el rendimiento de la ejecución pura de javascript o la manipulación de DOM.Si se quiere entender por qué, a continuación, iniciar aquí:

What's the difference between reflow and repaint?

respuesta Mayor (todavía puede ser válida):

Para ICS y por encima de la siguiente configuración en la vista web mejorará significativamente el rendimiento de representación para Sencha Touch en Android:

mWebView.setLayerType(WebView.LAYER_TYPE_HARDWARE, null); 

Sin embargo, en mi experiencia, esto va a introducir artefactos en la representación de CSS en función de la Administración de Veteranos de dispositivos y plataformas riation. No he encontrado específicamente una razón para esto y no espero que Google lo resuelva ya que el componente de vista web será reemplazado por una versión más nueva y mejor en Android 4.4.

https://developers.google.com/chrome/mobile/docs/webview/overview