Medición y Mejora del Rendimiento de React Native

Rate this content
Bookmark

La web tiene varias herramientas para medir el rendimiento, pero ¿qué hay de nosotros, los desarrolladores de React Native? ¿Alguna vez has agregado alguna optimización en tu código (como un memo aquí y allá) y te has preguntado si realmente tiene un impacto en el rendimiento?

Presentando un complemento de Flipper para medir el rendimiento de React Native, con un caso concreto de cómo lo utilizamos para llevar el rendimiento de nuestra aplicación a la máxima calidad.

Bonus: ¡una inmersión profunda en los gráficos de llama de React DevTools!

FAQ

Un buen rendimiento para una aplicación móvil, según Google, es que la aplicación pueda funcionar a 60 fps, es decir, 60 imágenes por segundo, especialmente cuando el usuario se desplaza por la aplicación para asegurar una experiencia suave.

React Native puede enfrentar problemas de rendimiento debido a la complejidad del hilo JS, ya que la mayoría de la lógica se ejecuta en JavaScript. Esto puede hacer que la aplicación sea irresponsiva si el hilo JS está demasiado ocupado o bloqueado.

Para monitorear el rendimiento en React Native, se recomienda usar el Monitor de Rendimiento de React Native y el complemento Flipper, que ayudan a visualizar los FPS de la interfaz de usuario y del JS y proporcionan una puntuación de rendimiento.

Es crucial probar el rendimiento en dispositivos de gama baja porque estos dispositivos pueden revelar más problemas de rendimiento que podrían no ser evidentes en dispositivos de alta gama, asegurando así una experiencia óptima para todos los usuarios.

Mejorar el rendimiento de las listas en React Native implica memoizar los elementos de la lista para evitar re-renderizaciones innecesarias y optimizar el manejo de listas anidadas para reducir la carga de renderización.

Para obtener mediciones de rendimiento deterministas, se deben realizar varias iteraciones de pruebas y promediar los resultados, manteniendo condiciones consistentes en cada prueba y, idealmente, automatizando los comportamientos que se desean probar.

Alexandre Moureaux
Alexandre Moureaux
19 min
21 Jun, 2022

Comments

Sign in or register to post your comment.

Video Summary and Transcription

Esta Charla analiza el rendimiento de las aplicaciones móviles y proporciona consejos para el análisis de rendimiento. Incluye una prueba de rendimiento en la aplicación de noticias TF1 y demuestra cómo analizar el rendimiento de JS con React DevTools. La Charla también explora la optimización del renderizado en componentes de React, como FlatList y listas anidadas con carruseles. Concluye con estrategias para optimizar la lista virtualizada y el carrusel para lograr un mejor rendimiento.

1. Introducción al rendimiento de aplicaciones móviles

Short description:

Hola a todos. Soy Alex, un líder técnico en BAM. Hablemos sobre el rendimiento de las aplicaciones móviles. Un buen rendimiento significa funcionar a 60 fps, dibujando 60 imágenes por segundo. En las aplicaciones de React Native, el hilo JS puede causar falta de respuesta. Utiliza el Monitor de Rendimiento de React Native y el complemento Flipper para monitorear. Realiza pruebas en dispositivos de gama baja y realiza medidas de rendimiento de manera determinista. Automatiza el comportamiento para reproducir condiciones.

Estoy muy emocionado de hablarles en la React Summit. Soy Alex. Soy un líder técnico en BAM. Desarrollamos aplicaciones móviles en Kotlin, Flutter y, por supuesto, React Native, y me encanta el tema del rendimiento de las aplicaciones móviles, así que vamos a sumergirnos.

¿Qué significa que una aplicación móvil tenga un buen rendimiento? Bueno, según este video de Google, que estará disponible en las diapositivas, tus aplicaciones deben poder funcionar a 60 fps, 60 imágenes por segundo. Esto significa que tu aplicación debe poder dibujar 60 imágenes por segundo cuando te desplazas hacia abajo, por ejemplo, para dar una impresión de suavidad al usuario. Básicamente, es como una película. Son imágenes animadas, básicamente.

La pregunta es, ¿qué pasa con las aplicaciones de React Native? Bueno, esto también se aplica a las aplicaciones de React Native, pero hay una complejidad añadida, el hilo JS. Debido a que la mayoría de tu lógica se ejecutará en el JS, es probable que la mayor parte de tu lógica empresarial resida en el lado del JS, debes asegurarte de que no esté demasiado ocupado. Por ejemplo, aquí tengo esta aplicación con un botón Haz clic en mí. Cuando hago clic en él, se actualiza el estado. He hecho clic una, dos, tres veces, pero Kill.js es demasiado costoso, así que cuando hago clic en él, el lado del JS se bloquea. Así que, incluso si hago clic en Haz clic en mí muchas veces después de hacer clic en Kill.js, no sucede nada, y no es hasta que Kill.js ha terminado que el JS realmente vuelve a responder, y puedes ver que se actualiza de cuatro a 12 veces así. Así que es muy importante echar un vistazo también al lado del JS, porque tu aplicación podría estar funcionando nativamente a 60 FPS pero ser completamente irresponsiva. Es por eso que React Native ofrece esta vista, el Monitor de Rendimiento de React Native, que muestra FPS de la interfaz de usuario y del JS, y es por eso que creamos este complemento Flipper, para poder mostrarlo en un gráfico. Además, como bonificación adicional, te proporciona una puntuación agradable para que puedas ejecutar pruebas de rendimiento. Pero, lo más probable es que esta puntuación pueda depender de muchos factores, en realidad, así que permíteme darte algunos consejos generales sobre medidas de rendimiento.

El primero es este. Debes realizar pruebas en un dispositivo de gama baja. Quiero decir, si solo pruebas en un dispositivo de gama alta, es probable que te pierdas la mayoría de los problemas que tus usuarios podrían estar experimentando. Un iPhone 13 puede ejecutar JavaScript o algún cálculo 10 veces más rápido que un Samsung Galaxy A21s, así que, bueno, ya sabes qué hacer. Definitivamente deberías probar en un dispositivo Android de gama baja. El segundo consejo es este. Debes hacer que tus medidas sean lo más deterministas posible. Las medidas de rendimiento son difícilmente deterministas, así que puedes hacer varias iteraciones y promediar el resultado. También puedes asegurarte de mantener las mismas condiciones tanto como sea posible para cada medida, por ejemplo, la red, los datos que estabas cargando, etc. Y, quiero decir, si quieres reproducir las mismas condiciones, es ideal poder automatizar el comportamiento que deseas probar. Y para eso, no necesariamente necesitas un marco de pruebas de extremo a extremo.

2. Consejos para el análisis de rendimiento

Short description:

Para garantizar medidas de rendimiento precisas en el lado del JS, desactiva JSDev. Utiliza React Devtools y JS Flame Graph para el análisis. En el lado de la interfaz de usuario, utiliza Android Studio, Systrace Profiler o Xcode Instrument.

Puedes usar ADB en Android, por ejemplo. Aquí, con ADB Shell Input Swipe, puedes activar un desplazamiento en tu aplicación. El tercer consejo es este. Desactiva JSDev si quieres tener medidas de rendimiento reales en el lado del JS, debes desactivar esto, porque podrías encontrar un problema que en realidad no verás en producción. Y el cuarto consejo es, bueno, debes encontrar algunos problemas al medir. Simplemente utiliza las mejores herramientas de análisis. En el hilo JS, eso sería React Devtools, o incluso ejecutar un JS Flame Graph con el perfilador Hermes. Y en el lado de la interfaz de usuario, utiliza herramientas nativas como Android Studio, Systrace Profiler o Xcode Instrument en iOS.

Check out more articles and videos

We constantly think of articles and videos that might spark Git people interest / skill us up or help building a stellar career

Depuración Web Moderna
JSNation 2023JSNation 2023
29 min
Depuración Web Moderna
Top Content
Pocos desarrolladores disfrutan depurando, y la depuración puede ser compleja para las aplicaciones web modernas debido a los múltiples marcos, lenguajes y bibliotecas utilizados. Pero, las herramientas de desarrollo han avanzado mucho en facilitar el proceso. En esta charla, Jecelyn profundizará en el estado moderno de la depuración, las mejoras en DevTools y cómo puedes usarlas para depurar tus aplicaciones de manera confiable.
El Futuro de las Herramientas de Rendimiento
JSNation 2022JSNation 2022
21 min
El Futuro de las Herramientas de Rendimiento
Top Content
Nuestra comprensión del rendimiento y la experiencia del usuario ha evolucionado mucho a lo largo de los años. Las herramientas de desarrollo web necesitan evolucionar de manera similar para asegurarse de que sean centradas en el usuario, accionables y contextuales donde se refiere a las experiencias modernas. En esta charla, Addy te guiará a través de cómo Chrome y otros han estado pensando en este problema y qué actualizaciones han estado haciendo a las herramientas de rendimiento para reducir la fricción para construir grandes experiencias en la web.
pnpm: un gestor de paquetes rápido y eficiente para JavaScript
DevOps.js Conf 2022DevOps.js Conf 2022
31 min
pnpm: un gestor de paquetes rápido y eficiente para JavaScript
Aprenderás sobre uno de los gestores de paquetes más populares para JavaScript y sus ventajas sobre npm y Yarn.Una breve historia de los gestores de paquetes de JavaScriptLa estructura aislada de node_modules creada por pnpmQué hace que pnpm sea tan rápidoQué hace que pnpm sea eficiente en el uso del espacio en discoSoporte para monoreposGestión de versiones de Node.js con pnpm
Elevando el Listón: Nuestro Viaje Haciendo de React Native una Opción Preferida
React Advanced Conference 2023React Advanced Conference 2023
29 min
Elevando el Listón: Nuestro Viaje Haciendo de React Native una Opción Preferida
En Microsoft, estamos comprometidos a proporcionar a nuestros equipos las mejores herramientas y tecnologías para construir aplicaciones móviles de alta calidad. React Native ha sido durante mucho tiempo una opción preferida por su alto rendimiento y gran experiencia de usuario, pero conseguir que los stakeholders se suban al carro puede ser un desafío. En esta charla, compartiremos nuestro viaje de hacer de React Native una opción preferida para los stakeholders que priorizan la facilidad de integración y la experiencia del desarrollador. Discutiremos las estrategias específicas que utilizamos para alcanzar nuestro objetivo y los resultados que logramos.
Opensource Documentation—Tales from React and React Native
React Finland 2021React Finland 2021
27 min
Opensource Documentation—Tales from React and React Native
Documentation is often your community's first point of contact with your project and their daily companion at work. So why is documentation the last thing that gets done, and how can we do it better? This talk shares how important documentation is for React and React Native and how you can invest in or contribute to making your favourite project's docs to build a thriving community
Llevando los Componentes del Servidor React a React Native
React Day Berlin 2023React Day Berlin 2023
29 min
Llevando los Componentes del Servidor React a React Native
Top Content
Los Componentes del Servidor React son un nuevo tema en la comunidad, un montón de marcos de trabajo los están implementando, la gente está discutiendo sobre este tema. Pero, ¿qué pasaría si pudiéramos usar los Componentes del Servidor React en React Native? ¿Y llevar todas las características de optimización que los RSC permiten a las aplicaciones móviles? En esta charla presentaría lo que somos capaces de hacer con los RSC en React Native!

Workshops on related topic

React, TypeScript y TDD
React Advanced Conference 2021React Advanced Conference 2021
174 min
React, TypeScript y TDD
Top Content
Featured WorkshopFree
Paul Everitt
Paul Everitt
ReactJS es extremadamente popular y, por lo tanto, ampliamente soportado. TypeScript está ganando popularidad y, por lo tanto, cada vez más soportado.

¿Los dos juntos? No tanto. Dado que ambos cambian rápidamente, es difícil encontrar materiales de aprendizaje precisos.

¿React+TypeScript, con los IDEs de JetBrains? Esa combinación de tres partes es el tema de esta serie. Mostraremos un poco sobre mucho. Es decir, los pasos clave para ser productivo, en el IDE, para proyectos de React utilizando TypeScript. En el camino, mostraremos el desarrollo guiado por pruebas y enfatizaremos consejos y trucos en el IDE.
Presentando FlashList: Construyamos juntos una lista performante en React Native
React Advanced Conference 2022React Advanced Conference 2022
81 min
Presentando FlashList: Construyamos juntos una lista performante en React Native
Top Content
WorkshopFree
David Cortés Fulla
Marek Fořt
Talha Naqvi
3 authors
En esta masterclass aprenderás por qué creamos FlashList en Shopify y cómo puedes usarlo en tu código hoy. Te mostraremos cómo tomar una lista que no es performante en FlatList y hacerla performante usando FlashList con mínimo esfuerzo. Usaremos herramientas como Flipper, nuestro propio código de benchmarking, y te enseñaremos cómo la API de FlashList puede cubrir casos de uso más complejos y aún así mantener un rendimiento de primera categoría.Sabrás:- Breve presentación sobre qué es FlashList, por qué lo construimos, etc.- Migrando de FlatList a FlashList- Enseñando cómo escribir una lista performante- Utilizando las herramientas proporcionadas por la biblioteca FlashList (principalmente el hook useBenchmark)- Usando los plugins de Flipper (gráfico de llamas, nuestro perfilador de listas, perfilador de UI & JS FPS, etc.)- Optimizando el rendimiento de FlashList utilizando props más avanzados como `getType`- 5-6 tareas de muestra donde descubriremos y solucionaremos problemas juntos- Preguntas y respuestas con el equipo de Shopify
Detox 101: Cómo escribir pruebas de extremo a extremo estables para su aplicación React Native
React Summit 2022React Summit 2022
117 min
Detox 101: Cómo escribir pruebas de extremo a extremo estables para su aplicación React Native
Top Content
WorkshopFree
Yevheniia Hlovatska
Yevheniia Hlovatska
A diferencia de las pruebas unitarias, las pruebas de extremo a extremo buscan interactuar con su aplicación tal como lo haría un usuario real. Y como todos sabemos, puede ser bastante desafiante. Especialmente cuando hablamos de aplicaciones móviles.
Las pruebas dependen de muchas condiciones y se consideran lentas e inestables. Por otro lado, las pruebas de extremo a extremo pueden dar la mayor confianza de que su aplicación está funcionando. Y si se hace correctamente, puede convertirse en una herramienta increíble para aumentar la velocidad del desarrollador.
Detox es un marco de pruebas de extremo a extremo en caja gris para aplicaciones móviles. Desarrollado por Wix para resolver el problema de la lentitud e inestabilidad y utilizado por React Native en sí como su herramienta de pruebas E2E.
Únete a mí en esta masterclass para aprender cómo hacer que tus pruebas de extremo a extremo móviles con Detox sean excelentes.
Prerrequisitos- iOS/Android: MacOS Catalina o más reciente- Solo Android: Linux- Instalar antes de la masterclass
Cómo construir una animación interactiva de “Rueda de la Fortuna” con React Native
React Summit Remote Edition 2021React Summit Remote Edition 2021
60 min
Cómo construir una animación interactiva de “Rueda de la Fortuna” con React Native
Top Content
Workshop
Oli Bates
Oli Bates
- Introducción - Cleo & nuestra misión- Lo que queremos construir, cómo encaja en nuestro producto & propósito, revisar los diseños- Comenzando con la configuración del entorno & “hola mundo”- Introducción a la animación de React Native- Paso 1: Hacer girar la rueda al presionar un botón- Paso 2: Arrastrar la rueda para darle velocidad- Paso 3: Agregar fricción a la rueda para frenarla- Paso 4 (extra): Agregar hápticos para una sensación inmersiva
Pruebas Efectivas con Detox
React Advanced Conference 2023React Advanced Conference 2023
159 min
Pruebas Efectivas con Detox
Workshop
Josh Justice
Josh Justice
Así que has configurado Detox para probar tu aplicación React Native. ¡Buen trabajo! Pero aún no has terminado: todavía hay muchas preguntas que necesitas responder. ¿Cuántas pruebas escribes? ¿Cuándo y dónde las ejecutas? ¿Cómo te aseguras de que hay datos de prueba disponibles? ¿Qué haces con partes de tu aplicación que utilizan APIs móviles que son difíciles de automatizar? Podrías invertir mucho esfuerzo en estas cosas, ¿vale la pena?
En esta masterclass de tres horas abordaremos estas preguntas discutiendo cómo integrar Detox en tu flujo de trabajo de desarrollo. Saldrás con las habilidades e información que necesitas para hacer de las pruebas Detox una parte natural y productiva del desarrollo diario.
Tabla de contenidos:
- Decidir qué probar con Detox vs React Native Testing Library vs pruebas manuales- Configuración de una capa de API falsa para pruebas- Cómo hacer que Detox funcione en CI en GitHub Actions de forma gratuita- Decidir cuánto de tu aplicación probar con Detox: una escala móvil- Integración de Detox en tu flujo de trabajo de desarrollo local
Prerrequisitos
- Familiaridad con la construcción de aplicaciones con React Native- Experiencia básica con Detox- Configuración de la máquina: un entorno de desarrollo CLI de React Native en funcionamiento que incluye Xcode o Android Studio
Despliegue de aplicaciones React Native en la nube
React Summit 2023React Summit 2023
88 min
Despliegue de aplicaciones React Native en la nube
WorkshopFree
Cecelia Martinez
Cecelia Martinez
Desplegar aplicaciones React Native manualmente en una máquina local puede ser complejo. Las diferencias entre Android e iOS requieren que los desarrolladores utilicen herramientas y procesos específicos para cada plataforma, incluidos los requisitos de hardware para iOS. Los despliegues manuales también dificultan la gestión de las credenciales de firma, las configuraciones de entorno, el seguimiento de las versiones y la colaboración en equipo.
Appflow es la plataforma de DevOps móvil en la nube creada por Ionic. Utilizar un servicio como Appflow para construir aplicaciones React Native no solo proporciona acceso a potentes recursos informáticos, sino que también simplifica el proceso de despliegue al proporcionar un entorno centralizado para gestionar y distribuir tu aplicación en múltiples plataformas. Esto puede ahorrar tiempo y recursos, permitir la colaboración, así como mejorar la confiabilidad y escalabilidad general de una aplicación.
En este masterclass, desplegarás una aplicación React Native para su entrega en dispositivos de prueba Android e iOS utilizando Appflow. También aprenderás los pasos para publicar en Google Play y Apple App Stores. No se requiere experiencia previa en el despliegue de aplicaciones nativas, y obtendrás una comprensión más profunda del proceso de despliegue móvil y las mejores prácticas para utilizar una plataforma de DevOps móvil en la nube para enviar rápidamente a gran escala.