Depuración del rendimiento de RN en Android

Rate this content
Bookmark

¿Quieres saber si tu aplicación RN tiene el mejor rendimiento? Echa un vistazo a la estadística de renderizado lento de la UI en la tienda de aplicaciones, si tus números no son tan buenos, ¡ven a esta charla! Presentaré Systrace, una herramienta que puede parecer intimidante al principio, pero es una herramienta fantástica una vez que aprendes a dominarla. Mostraré cómo nos ayudó a detectar y solucionar problemas de rendimiento en nuestra aplicación.

This talk has been presented at React Summit Remote Edition 2021, check out the latest edition of this React Conference.

FAQ

Alex es líder en BAM, una empresa con sede en París que desarrolla aplicaciones móviles.

BAM desarrolla aplicaciones móviles utilizando Kotlin, Swift, Flutter y React Native.

Una métrica clave para analizar el rendimiento en React Native es la tasa de fotogramas, idealmente a 60 fotogramas por segundo.

React Native utiliza 'El monitor de rendimiento' para obtener las tasas de fotogramas del hilo de UI y del hilo de JS.

Systrace es una herramienta de System Trace incluida en el SDK de Android que permite analizar detalladamente el rendimiento de una aplicación mediante trazas que se pueden visualizar en Chrome.

Alex identificó los problemas observando las 'Fs' rojas y amarillas en la línea de fotogramas dentro del archivo de traza de Systrace, lo que indica fotogramas que no se procesaron eficientemente.

Uno de los problemas fue una animación inicial Lottie que necesitaba optimización. Una vez optimizada, mejoró el rendimiento de la aplicación.

El segundo problema de rendimiento estaba relacionado con anuncios que se ejecutaban en una vista web al inicio de la aplicación y necesitaban optimización.

Alexandre Moureaux
Alexandre Moureaux
7 min
14 May, 2021

Comments

Sign in or register to post your comment.
Video Summary and Transcription
La charla de hoy se centra en el rendimiento de las aplicaciones React Native. El ponente habla sobre la importancia de la velocidad de fotogramas como métrica e introduce el monitor de rendimiento proporcionado por React Native. Explica cómo Systrace, una herramienta de traza del sistema, se puede utilizar para identificar problemas de rendimiento. El primer problema de rendimiento analizado involucra al hilo de la interfaz de usuario realizando cálculos excesivos, lo que lleva a gastar una cantidad significativa de tiempo en la función de dibujo. Se identifica que la vista de animación Lottie necesita optimización. La charla también menciona un segundo problema de rendimiento que se explorará.
Available in English: Debugging RN Android Performance

1. React Native Performance and Systrace

Short description:

Hola a todos. Hoy quiero hablar sobre el rendimiento de las aplicaciones de React Native. La tasa de fotogramas es una métrica clave para analizar el rendimiento de la aplicación. React Native proporciona un monitor de rendimiento que muestra las tasas de fotogramas del hilo de UI y del hilo de JS. Para identificar problemas de rendimiento, utilizamos Systrace, una herramienta de traza del sistema disponible en el SDK de Android. Systrace genera un archivo de traza que se puede abrir en Chrome, mostrando las tasas de fotogramas y las fuentes de los problemas de rendimiento.

Hola a todos. Soy Alex. Estoy emocionado de hablarles en la Cumbre de React. Soy líder en BAM y somos una empresa con sede en París. Desarrollamos aplicaciones móviles en Kotlin, Swift, Flutter y, por supuesto, React Native. Hoy quiero hablarles sobre el rendimiento de las aplicaciones de React Native. Ahora, una de las métricas clave para analizar el rendimiento de su aplicación es la tasa de fotogramas. Desea que su aplicación se ejecute a 60 fotogramas por segundo. Una de las cosas buenas que vienen con React Native de serie es esta herramienta. El monitor de rendimiento. Puede obtener las tasas de fotogramas del hilo de UI y también del hilo de JS. Ahora, uno de los problemas a los que nos enfrentamos en nuestra aplicación es que la tasa del hilo de UI era consistentemente baja después de iniciar la aplicación, incluso cuando el usuario no estaba haciendo absolutamente nada. La pregunta era cómo descubrir qué está sucediendo realmente bajo el capó. Y la solución para eso fue Systrace. Systrace es la abreviatura de System Trace. Está disponible de serie en el SDK de Android en la carpeta Platform Tools. Básicamente, es un script para que pueda conectar su aplicación a la computadora y simplemente iniciar el script, hacer algunas cosas en su aplicación, detener el script y se imprimirá un archivo HTML enorme, un archivo de traza. Puede abrir ese archivo en Chrome y cuando lo abra, se verá así. Wow. Es intimidante, ¿verdad? Muy colorido, pero bastante intimidante. Lo primero que desea hacer es en el lado izquierdo, encontrar su aplicación. En mi caso, mi ID de paquete era myapp.debug, así es donde lo encontré. Y luego, debajo de él, dado que estamos hablando de tasas de fotogramas, lo que es realmente interesante es la línea de fotogramas. Si haces zoom un poco, en la línea de fotogramas, notarás muchas F. Hay F rojas, F amarillas y F verdes. Puedes suponer que una F roja es mala y una F verde es buena. De hecho, una F verde es en realidad un fotograma que se pudo calcular en menos de 16 milisegundos para que la aplicación pueda ejecutarse a 60 fotogramas por segundo. Las F amarillas y las F rojas no tanto. Entonces, si estás tratando de analizar problemas de rendimiento, debes echar un vistazo a las fuentes.

2. Analyzing Performance Issues: Part 1

Short description:

Vamos a analizar el primer problema de rendimiento. Al hacer zoom en un solo fotograma, podemos ver que el hilo de UI realiza numerosos cálculos, superando el tiempo asignado. Al examinar los detalles, descubrimos que la función de dibujo, encargada de redibujar elementos, estaba llevando mucho tiempo. Una investigación más detallada nos llevó a la vista de animación Lottie, que requería optimización. Ahora, exploremos el segundo problema de rendimiento.

de Fs rojas y Fs amarillas. En nuestra aplicación, en realidad teníamos dos fuentes principales de Fs rojas. Echemos un vistazo al primero. Si hacemos zoom en un solo fotograma, esto es aproximadamente 20 milisegundos de tiempo, y podemos ver a nuestro amigo, el hilo de UI. Esto es lo que se informó en el monitor de performance, ¿verdad? Podemos ver que en un solo fotograma, está realizando muchos cálculos, por lo que no puede ajustarse al conjunto de tiempo de 16 milisegundos. Ahora la pregunta es, ¿qué está haciendo realmente? Así que podemos echar un vistazo. En realidad, podemos hacer clic dentro y ver un poco más de detalles, pero es muy detallado. Por ejemplo, vemos que tenemos una función de dibujo que está llevando mucho tiempo, pero esto es básicamente el sistema operativo redibujando cosas. Entonces, algo necesita ser redibujado y lleva mucho tiempo, pero realmente no sabemos qué es. Podemos desplazarnos hacia abajo un poco y encontrar el hilo de renderizado. El hilo de renderizado se ejecuta en la GPU y realiza cálculos costosos en la GPU, y en este caso tenemos un poco de suerte, porque aquí vemos algo sobre la vista de animación Lottie. Ahora, Lottie es un marco de animación y en realidad teníamos una animación Lottie al inicio de nuestra aplicación, y descubrimos que necesitaba ser optimizada, y ese fue el problema de performance. Así que ese es un problema de performance resuelto, queda un problema más por resolver. Veamos el segundo. El segundo ocurría cerca del final del archivo de traza. Aquí podemos ver muchas Fs rojas, ¿verdad? Y esto sucedía cuando el usuario no estaba haciendo nada en absoluto. Esto era muy intrigante. Si hacemos zoom como antes en los fotogramas, podemos ver que muchas cosas suceden en el hilo de UI y el hilo de renderizado. Están ocupados con cálculos, pero no tenemos tanta suerte como antes porque todas las tareas parecen ser muy detalladas. Realmente no podemos entender qué está sucediendo. Sabemos que algo costoso necesita ser redibujado cada vez, pero realmente no sabemos qué es. ¿Qué podemos hacer? Bueno, podemos echar un vistazo a lo que está sucediendo allí. Si nos desplazamos un poco hacia arriba, la sección de CPU es bastante interesante. Podemos ver en cualquier momento dado qué está ejecutando cada una de las CPUs para su aplicación en su dispositivo. Por ejemplo, si hacemos zoom, podemos ver que en este momento, la CPU 4 estaba ejecutando MQTJS. Ese es el hilo JS, y este estaba ejecutando Fresco, que se encarga de las imágenes, porque Fresco es una biblioteca utilizada para manejar imágenes en React Native. Entonces, en este momento, ¿qué está sucediendo realmente? Lo bueno de Systrace es que puedes dibujar un rectángulo, una gran selección de todo lo que está sucediendo en el conjunto de tiempo en la CPU, y en la parte inferior, verás básicamente todas las tareas que se han ejecutado. Si haces clic en la duración de la pared puedes ordenar las tareas según el tiempo de CPU más alto. Y aquí, la primera es el hilo de renderizado. Eso ya lo sabíamos. El hilo de renderizado estaba haciendo algo costoso, pero no sabíamos qué era. El segundo era bastante interesante, porque se llama Chrome inprogre, y una búsqueda rápida nos hizo darnos cuenta de que esto estaba relacionado con las vistas web, así que pensamos en qué vistas web teníamos, y resulta que teníamos anuncios ejecutándose al inicio de nuestra aplicación, y esos anuncios se ejecutan en una vista web, y también necesitaban ser optimizados. Esa fue nuestra segunda fuente de problema de performance. Y ahora, una vez que se resolvieron, solo hay aplicaciones verdes por todas partes. Mucho mejor, ¿verdad? Eso es todo. Espero que hayan aprendido muchas cosas, y no duden en hacerme preguntas. Gracias por ver.

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

Una Guía del Comportamiento de Renderizado de React
React Advanced 2022React Advanced 2022
25 min
Una Guía del Comportamiento de Renderizado de React
Top Content
This transcription provides a brief guide to React rendering behavior. It explains the process of rendering, comparing new and old elements, and the importance of pure rendering without side effects. It also covers topics such as batching and double rendering, optimizing rendering and using context and Redux in React. Overall, it offers valuable insights for developers looking to understand and optimize React rendering.
Construyendo Mejores Sitios Web con Remix
React Summit Remote Edition 2021React Summit Remote Edition 2021
33 min
Construyendo Mejores Sitios Web con Remix
Top Content
Remix is a web framework built on React Router that focuses on web fundamentals, accessibility, performance, and flexibility. It delivers real HTML and SEO benefits, and allows for automatic updating of meta tags and styles. It provides features like login functionality, session management, and error handling. Remix is a server-rendered framework that can enhance sites with JavaScript but doesn't require it for basic functionality. It aims to create quality HTML-driven documents and is flexible for use with different web technologies and stacks.
Compilador React Forget - Entendiendo React Idiomático
React Advanced 2023React Advanced 2023
33 min
Compilador React Forget - Entendiendo React Idiomático
Top Content
Joe Savona
Mofei Zhang
2 authors
The Talk discusses React Forget, a compiler built at Meta that aims to optimize client-side React development. It explores the use of memoization to improve performance and the vision of Forget to automatically determine dependencies at build time. Forget is named with an F-word pun and has the potential to optimize server builds and enable dead code elimination. The team plans to make Forget open-source and is focused on ensuring its quality before release.
Uso efectivo de useEffect
React Advanced 2022React Advanced 2022
30 min
Uso efectivo de useEffect
Top Content
Today's Talk explores the use of the useEffect hook in React development, covering topics such as fetching data, handling race conditions and cleanup, and optimizing performance. It also discusses the correct use of useEffect in React 18, the distinction between Activity Effects and Action Effects, and the potential misuse of useEffect. The Talk highlights the benefits of using useQuery or SWR for data fetching, the problems with using useEffect for initializing global singletons, and the use of state machines for handling effects. The speaker also recommends exploring the beta React docs and using tools like the stately.ai editor for visualizing state machines.
Enrutamiento en React 18 y más allá
React Summit 2022React Summit 2022
20 min
Enrutamiento en React 18 y más allá
Top Content
Routing in React 18 brings a native app-like user experience and allows applications to transition between different environments. React Router and Next.js have different approaches to routing, with React Router using component-based routing and Next.js using file system-based routing. React server components provide the primitives to address the disadvantages of multipage applications while maintaining the same user experience. Improving navigation and routing in React involves including loading UI, pre-rendering parts of the screen, and using server components for more performant experiences. Next.js and Remix are moving towards a converging solution by combining component-based routing with file system routing.
(Más fácil) Visualización interactiva de datos en React
React Advanced 2021React Advanced 2021
27 min
(Más fácil) Visualización interactiva de datos en React
Top Content
This Talk is about interactive data visualization in React using the Plot library. Plot is a high-level library that simplifies the process of visualizing data by providing key concepts and defaults for layout decisions. It can be integrated with React using hooks like useRef and useEffect. Plot allows for customization and supports features like sorting and adding additional marks. The Talk also discusses accessibility concerns, SSR support, and compares Plot to other libraries like D3 and Vega-Lite.

Workshops on related topic

Masterclass de Depuración de Rendimiento de React
React Summit 2023React Summit 2023
170 min
Masterclass de Depuración de Rendimiento de React
Top Content
Featured WorkshopFree
Ivan Akulov
Ivan Akulov
Los primeros intentos de Ivan en la depuración de rendimiento fueron caóticos. Vería una interacción lenta, intentaría una optimización aleatoria, vería que no ayudaba, y seguiría intentando otras optimizaciones hasta que encontraba la correcta (o se rendía).
En aquel entonces, Ivan no sabía cómo usar bien las herramientas de rendimiento. Haría una grabación en Chrome DevTools o React Profiler, la examinaría, intentaría hacer clic en cosas aleatorias, y luego la cerraría frustrado unos minutos después. Ahora, Ivan sabe exactamente dónde y qué buscar. Y en esta masterclass, Ivan te enseñará eso también.
Así es como va a funcionar. Tomaremos una aplicación lenta → la depuraremos (usando herramientas como Chrome DevTools, React Profiler, y why-did-you-render) → identificaremos el cuello de botella → y luego repetiremos, varias veces más. No hablaremos de las soluciones (en el 90% de los casos, es simplemente el viejo y regular useMemo() o memo()). Pero hablaremos de todo lo que viene antes - y aprenderemos a analizar cualquier problema de rendimiento de React, paso a paso.
(Nota: Esta masterclass es más adecuada para ingenieros que ya están familiarizados con cómo funcionan useMemo() y memo() - pero quieren mejorar en el uso de las herramientas de rendimiento alrededor de React. Además, estaremos cubriendo el rendimiento de la interacción, no la velocidad de carga, por lo que no escucharás una palabra sobre Lighthouse 🤐)
Aventuras de Renderizado Concurrente en React 18
React Advanced 2021React Advanced 2021
132 min
Aventuras de Renderizado Concurrente en React 18
Top Content
Featured WorkshopFree
Maurice de Beijer
Maurice de Beijer
Con el lanzamiento de React 18 finalmente obtenemos el tan esperado renderizado concurrente. Pero, ¿cómo va a afectar eso a tu aplicación? ¿Cuáles son los beneficios del renderizado concurrente en React? ¿Qué necesitas hacer para cambiar al renderizado concurrente cuando actualices a React 18? ¿Y qué pasa si no quieres o no puedes usar el renderizado concurrente todavía?

¡Hay algunos cambios de comportamiento de los que debes estar al tanto! En esta masterclass cubriremos todos esos temas y más.

Acompáñame con tu portátil en esta masterclass interactiva. Verás lo fácil que es cambiar al renderizado concurrente en tu aplicación React. Aprenderás todo sobre el renderizado concurrente, SuspenseList, la API startTransition y más.
Consejos sobre React Hooks que solo los profesionales conocen
React Summit Remote Edition 2021React Summit Remote Edition 2021
177 min
Consejos sobre React Hooks que solo los profesionales conocen
Top Content
Featured Workshop
Maurice de Beijer
Maurice de Beijer
La adición de la API de hooks a React fue un cambio bastante importante. Antes de los hooks, la mayoría de los componentos tenían que ser basados en clases. Ahora, con los hooks, estos son a menudo componentes funcionales mucho más simples. Los hooks pueden ser realmente simples de usar. Casi engañosamente simples. Porque todavía hay muchas formas en las que puedes equivocarte con los hooks. Y a menudo resulta que hay muchas formas en las que puedes mejorar tus componentes con una mejor comprensión de cómo se puede usar cada hook de React.Aprenderás todo sobre los pros y los contras de los diversos hooks. Aprenderás cuándo usar useState() versus useReducer(). Veremos cómo usar useContext() de manera eficiente. Verás cuándo usar useLayoutEffect() y cuándo useEffect() es mejor.
React, TypeScript y TDD
React Advanced 2021React Advanced 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.
Masterclass Web3 - Construyendo Tu Primer Dapp
React Advanced 2021React Advanced 2021
145 min
Masterclass Web3 - Construyendo Tu Primer Dapp
Top Content
Featured WorkshopFree
Nader Dabit
Nader Dabit
En esta masterclass, aprenderás cómo construir tu primer dapp de pila completa en la blockchain de Ethereum, leyendo y escribiendo datos en la red, y conectando una aplicación de front end al contrato que has desplegado. Al final de la masterclass, entenderás cómo configurar un entorno de desarrollo de pila completa, ejecutar un nodo local e interactuar con cualquier contrato inteligente usando React, HardHat y Ethers.js.
Diseñando Pruebas Efectivas con la Biblioteca de Pruebas de React
React Summit 2023React Summit 2023
151 min
Diseñando Pruebas Efectivas con la Biblioteca de Pruebas de React
Top Content
Featured Workshop
Josh Justice
Josh Justice
La Biblioteca de Pruebas de React es un gran marco para las pruebas de componentes de React porque responde muchas preguntas por ti, por lo que no necesitas preocuparte por esas preguntas. Pero eso no significa que las pruebas sean fáciles. Todavía hay muchas preguntas que tienes que resolver por ti mismo: ¿Cuántas pruebas de componentes debes escribir vs pruebas de extremo a extremo o pruebas de unidad de nivel inferior? ¿Cómo puedes probar una cierta línea de código que es difícil de probar? ¿Y qué se supone que debes hacer con esa persistente advertencia de act()?
En esta masterclass de tres horas, presentaremos la Biblioteca de Pruebas de React junto con un modelo mental de cómo pensar en el diseño de tus pruebas de componentes. Este modelo mental te ayudará a ver cómo probar cada bit de lógica, si debes o no simular dependencias, y ayudará a mejorar el diseño de tus componentes. Te irás con las herramientas, técnicas y principios que necesitas para implementar pruebas de componentes de bajo costo y alto valor.
Tabla de contenidos- Los diferentes tipos de pruebas de aplicaciones de React, y dónde encajan las pruebas de componentes- Un modelo mental para pensar en las entradas y salidas de los componentes que pruebas- Opciones para seleccionar elementos DOM para verificar e interactuar con ellos- El valor de los mocks y por qué no deben evitarse- Los desafíos con la asincronía en las pruebas de RTL y cómo manejarlos
Requisitos previos- Familiaridad con la construcción de aplicaciones con React- Experiencia básica escribiendo pruebas automatizadas con Jest u otro marco de pruebas unitarias- No necesitas ninguna experiencia con la Biblioteca de Pruebas de React- Configuración de la máquina: Node LTS, Yarn