Entonces, ¿qué debemos hacer? Bueno, lo primero que debes hacer es diferenciar entre la renderización inicial, y cuando pasas el cursor sobre un componente, ya que activamos esta nueva opción anteriormente, verás algo como esto. Esta es la primera vez que se renderiza el componente. ¿O esos componentes realmente se están volviendo a renderizar? Han sido montados inicialmente, pero ¿se están renderizando una segunda vez o más veces? Y en este caso verás algo como esto, una lista virtualizada, es un cambio de estado, un último cambio, del cual realmente no sabemos nada porque es la implementación interna de FlatList.
En nuestro caso, en realidad, todos los componentes aquí se estaban volviendo a renderizar porque, recuerda, dije que habíamos cargado nuestro feed anteriormente, por lo que ya se estaban renderizando algunos elementos en el feed, por lo que cuando nos desplazamos hacia abajo, básicamente se están volviendo a renderizar incluso los elementos superiores en el feed. Y esto es una locura, ¿verdad? No es necesario que se rendericen. ¿Entonces qué está pasando? Bueno, la primera iteración que hicimos para solucionarlo fue esta. Y todos deberían saber esto. Entonces, FlatList es una lista virtualizada y la virtualización funciona más o menos así. Tienes una larga lista de elementos, por ejemplo, no sé, 10,000, pero por supuesto, por razones de rendimiento, no podrás mostrarlos todos al mismo tiempo. Utilizas una lista virtualizada para mostrar solo lo que el usuario ve y algunos elementos arriba y algunos elementos abajo para garantizar un desplazamiento suave. Es importante tener en cuenta que en React Native, esta es la propiedad de FlatList llamada tamaño de la ventana y en React Native, en realidad, va a renderizar 10 pantallas de elementos por encima del área de visualización actual y 10 pantallas por debajo de ella. Por lo tanto, en realidad renderiza muchos elementos. Es algo importante a tener en cuenta. Pero, ¿cómo funciona esto? Bueno, básicamente, FlatList mantiene un estado en su implementación interna del primer elemento a renderizar y el último elemento a renderizar. Entonces, cuando nos desplazamos hacia abajo, bueno, esos cambian. Y esto desencadena una nueva renderización de la lista virtualizada, lo cual es normal. Básicamente, esto significa que renderItem, lo que pasas en tu renderItem, se llama enScroll. Esto es por diseño, lo que significa que debes seguir absolutamente las mejores prácticas definidas en la documentación de React Native sobre FlatList, y debes memoizar todos los elementos de tu lista. Y eso es lo que hicimos, y pasamos de esto a esto.
La gran diferencia que debes notar es esta. Básicamente, tenemos mucho gris aquí. Los elementos que memoizamos ahora no se vuelven a renderizar, y eso es lo que queremos. Todavía tenemos algunas cosas verdes arriba. Esto es básicamente la implementación interna de las listas virtualizadas, cambios de estado, etc. Por lo tanto, no podemos evitar que se rendericen, y lo que realmente es costoso aquí son los hijos, y todavía tenemos algunas cosas verdes aquí. Llegaremos a eso en un minuto, porque primero, ya tenemos algunas cosas menos verdes, tenemos algunas cosas más, quiero decir, tenemos menos cosas renderizándose, así que solo revisemos nuestra puntuación de rendimiento. Revisemos nuestras medidas, como antes en el complemento Flipper, y esto es lo que nos muestra ahora. Pasamos de 40 a 52, Chase solo está inactivo durante unos 3 segundos, y el hilo de la interfaz de usuario sigue alrededor de 60. Ok, no es fantástico, pero solo con un simple memo, hemos logrado una mejora muy buena para el rendimiento.
Comments