Antecedentes
Estamos revisando constantemente el rendimiento de las soluciones m贸viles multiplataforma disponibles en el mercado. Queremos saber qu茅 tecnolog铆a es mejor para desarrollar un producto.
En este art铆culo, decidimos investigar el rendimiento de representaci贸n de la GUI, que es de gran importancia para los usuarios m贸viles. En palabras simples, cualquier freno ser谩 visible a simple vista.
La medici贸n del rendimiento de la interfaz de usuario es compleja y requiere la misma implementaci贸n de la misma funcionalidad en todas las plataformas. Utilizamos GameBench como herramienta de pruebapara estar seguros de que somos objetivos (esto no cambia el hecho de que realmente amamos a Flutter y a煤n hacemos muchos proyectos en React Native, as铆 como tambi茅n hacemos desarrollo nativo). Logramos colocar cada aplicaci贸n en un solo entorno de prueba.
El c贸digo fuente es de c贸digo abierto, as铆 que si lo desea, experimente y comparta sus pensamientos con nosotros. Las animaciones de la interfaz de usuario usan diferentes herramientas seg煤n la plataforma, por lo que hemos reducido nuestro alcance a las bibliotecas compatibles con cada plataforma (excepto en un caso), o al menos hemos hecho todo lo posible para lograrlo. Los resultados de las pruebas pueden variar y dependen de su enfoque de implementaci贸n. Calcularemos que usted, como un verdadero experto en una tecnolog铆a en particular, puede elegir y personalizar su conjunto de herramientas que proporcionar谩n tarifas m谩s altas. Estaremos encantados si hace esto y nos cuenta lo que sucedi贸.
Acerca de hierro
Para fines de prueba, utilizamos Xiaomi Redmi Note 5 y iPhone 6s.
Enlace al repositorio: c贸digo fuente
Prueba 1: vista de lista
Hemos implementado la misma interfaz de forma nativa (en Android e iOS), en React Native y en Flutter. Tambi茅n automatizamos la velocidad de desplazamiento con RecyclerView.SmoothScroller en Android. En iOS y React Native, utilizamos un temporizador y desplazamiento program谩tico. En Flutter, utilizamos el ScrollController para desplazarnos suavemente por la lista. En cada caso, ten铆amos 1000 elementos en la lista, y fijamos el mismo tiempo de desplazamiento al 煤ltimo elemento de la lista. En cada uno de estos casos, utilizamos el almacenamiento en cach茅 de im谩genes con diferentes bibliotecas para cada plataforma. Vea el c贸digo fuente para m谩s detalles .
Bibliotecas para cargar y almacenar im谩genes en cach茅
iOS
Androide
Reaccionar nativo
Desafortunadamente, el punto de referencia no produce puntos de referencia de GPU para dispositivos Android. Intentamos diferente, pero por desgracia.
Otros resultados de pruebas para Android
- Todas las pruebas mostraron aproximadamente el mismo FPS.
- Android Native usa la mitad de la memoria que Flutter y React Native.
- React Native requiere el mayor uso de CPU. La raz贸n es el uso de JS Bridge entre JS y el c贸digo nativo, lo que conduce a una p茅rdida de recursos para la serializaci贸n y deserializaci贸n.
- Cuando se trata de la duraci贸n de la bater铆a, Android Native tiene la mejor puntuaci贸n. Reacciona los retrasos nativos detr谩s de Android y Flutter. La ejecuci贸n de animaci贸n continua consume m谩s bater铆a en React Native.
Resultados de prueba para iPhone 6s
- FPS React Native tiene peores resultados que Flutter y Swift. La raz贸n es la imposibilidad de usar la compilaci贸n de IoT en iOS.
- Memoria. Flutter es comparable a Swift en t茅rminos de consumo de memoria, pero carga el procesador m谩s duro. En esta prueba, React Native va muy por detr谩s de Flutter y Swift.
- Flutter vs Swift: Flutter es intensivo en CPU, Swift es intensivo en GPU.
Prueba 2: animaci贸n pesada
Hoy en d铆a, la mayor铆a de los tel茅fonos con Android e iOS tienen un hardware potente. En la mayor铆a de los casos, al usar aplicaciones comerciales comunes, no se notaron ca铆das de FPS. Es por eso que decidimos ejecutar algunas pruebas con animaci贸n pesada. Para crear animaciones vectoriales, utilizamos Lottie para Android, iOS, React Native y Flare for Flutter:
Lottie para Android, iOS, React Native y Flare for Flutter .
Resultados de prueba de Android
- Android Native y React Native son comparables en rendimiento. Esto es obvio porque Lottie for React Native utiliza llamadas nativas (16-19% de CPU, 30-29 FPS).
- El resultado de Flutter fue sorprendente, aunque se estrope贸 un poco durante las pruebas (12% de CPU y 9 FPS).
- Android Native requiere la menor cantidad de memoria (205 MB); React Native requiere 280 MB y Flutter requiere 266 MB.
- Aplicaci贸n de arranque en fr铆o. Seg煤n este indicador, Flutter es el l铆der (2 segundos). Para Android Native y React Native, se tarda unos 4 segundos.
Descubrimos que eliminar una animaci贸n de la cuadr铆cula aumenta el FPS al 40% para Flutter. Suponemos que Flare es pesado y est谩 poco optimizado para este tipo de tarea. Es por eso que Flutter tuvo una ca铆da tan grande en FPS.
Mira este:
Resultados de la prueba IOS
- Los resultados de iOS y React Native en esta prueba son casi los mismos que los de Lottie para React Native.
- Flare with Flutter nunca deja de sorprender. 隆La llamarada en esta prueba es generalmente genial!
- El c贸digo nativo para iOS aqu铆 requiere la menor cantidad de memoria (48 MB). React Native requiere 135 MB y Flutter 117 MB.
- Aplicaci贸n de arranque en fr铆o. Seg煤n este indicador, Flutter es el l铆der (2 segundos). Para el c贸digo nativo de iOS y React Native, lleva unos 10 segundos.
Tenga en cuenta: aqu铆 usamos una biblioteca diferente con Flutter, que es mucho m谩s pesada que la que usamos para otras plataformas, y esta puede ser la raz贸n de la ca铆da de FPS para Flutter.
Prueba 3: animaci贸n pesada con rotaciones, escalado y desvanecimiento
En esta prueba, comparamos el rendimiento de la animaci贸n con 200 im谩genes. La rotaci贸n y el escalado se realizan simult谩neamente.
Android
- Android Native .
- Flutter Native fps , .
- React Native .
iOS
- iPhone 6s , FPS 3 .
- , GPU.
- React Native , Flutter GPU.
- , React Native .
Para aplicaciones comerciales con animaci贸n ordinaria y apariencia hermosa, la elecci贸n de la tecnolog铆a para el desarrollo no es cr铆tica. Pero si necesita una gran animaci贸n, tenga en cuenta que el desarrollo nativo proporcionar谩 el mejor rendimiento en este caso. Luego viene Flutter, y luego React Native. Definitivamente no recomendar铆amos usar React Native para tareas que pueden consumir muchos recursos de CPU, mientras que Flutter es ideal para tales tareas tanto desde el punto de vista del procesador como de la memoria.
La elecci贸n de la herramienta depende del producto y la situaci贸n espec铆ficos. Si desea desarrollar MVP para una plataforma, puede elegir el desarrollo nativo, pero tenga en cuenta que Flutter le permite crear aplicaciones tanto para dispositivos m贸viles como para la web. Entonces, quiz谩s Flutter se convierta en el l铆der del mercado en el desarrollo multiplataforma en el futuro cercano. Hoy, Flutter es un competidor muy valioso para las herramientas de desarrollo nativas, especialmente si su presupuesto de desarrollo es peque帽o, pero a煤n as铆 desea proporcionar un nivel aceptable de rendimiento de la aplicaci贸n.
Hay muchos factores que influyen en los est谩ndares de proceso y desarrollo para cada tecnolog铆a. Hemos tratado de maximizar la transparencia del proceso al proporcionar un entorno de prueba 煤nico para cada aplicaci贸n y un conjunto unificado de herramientas para medir el rendimiento.
Publicidad
驴Necesita un servidor para una aplicaci贸n m贸vil ? 隆Eche un vistazo m谩s de cerca a nuestros servidores 茅picos ! 隆Estos son servidores con los 煤ltimos procesadores AMD EPYC! La configuraci贸n m谩xima le permitir谩 colocar un proyecto de cualquier complejidad: 128 n煤cleos de CPU, 512 GB de RAM, 4000 GB de NVMe.