sitio web. Para esa visita, toma todas estas visitas, las ordena, elige el 25% más lento de esas visitas y nombra al más rápido de este lento 25% de visitas como el INP para la página. Entonces, una vez más, lo que es INP, mides cada interacción, eliges el 25% más lento de interacción, luego recoges todas las visitas lentas, eliges el 25% más lento de todas las visitas, y obtienes el INP para la página. Y este INP para la página es amarillo o rojo en casi todas las aplicaciones de
React que he visto. Entonces, bien, ahora, volvamos a nuestra aplicación. Nuestra aplicación es lenta, y esto hace que el INP también sea lento. Y si tuviera que
debug este problema, vería que este problema, esta escritura lenta en el filtro es causada por el renderizado de
React. Aquí está lo que está sucediendo en la aplicación. Entonces, cuando escribo en la entrada del filtro, lo que sucede en la aplicación es que
React llama a esta función set filter que es un hook useState. Eso cambia el estado en un montón de componentes, y eso hace que
React renderice todos estos componentes uno por uno hasta que termina. Y esto es lo que hace que mi entrada sea lenta. Este re-renderizado es una operación de detener el mundo. Nada puede suceder hasta que
React termine. Entonces, cuando escribo en el teclado, la página no se actualizará hasta que
React haya terminado de procesar todos los componentes, ¿verdad? Si toma dos segundos procesar todos los componentes, entonces la página no se actualizará hasta dos segundos después. Este es el clásico renderizado lento de
React, y esto es lo que hace que la interacción se expanda en las aplicaciones de
React. Ahora, tenemos un problema de
performance, ¿verdad? Escribo en la entrada del filtro, la aplicación se congela por un segundo. Esto empeora la interacción, empeora la
user experience y empeora el MP. Ahora, si fueras mi pregunta para ustedes, si fueras un desarrollador de esta aplicación, ¿cómo intentarías optimizar esto? ¿Cómo intentarías hacer esto más rápido? Spoilers. ¿Alguna otra idea? ¿Debounce? ¿Qué? Sí, bien, entonces, sí, hay un montón de cosas que podrías hacer. Podrías intentar envolver algunas cosas con la memoria de
React, si hay algunos componentes que se están renderizando innecesariamente. Podrías optimizar el componente. Podrías virtualizar la lista, si es una lista grande, y es una lista grande. Podrías hacer uso de debounce y throttle. Y una cosa más que podrías hacer, que
React está introduciendo, podrías también hacer que las actualizaciones no sean urgentes utilizando useTransition. ¿Qué significa esto? Entonces, con
React 17 y versiones anteriores, cada actualización que ocurre en la aplicación se considera urgente. Si haces clic en un botón,
React tiene que manejar la actualización inmediatamente. Si escribes en el campo de texto,
React tiene que renderizar la lista de nodos inmediatamente, y eso es una operación de detener el mundo. Con
React 18, sin embargo, tus actualizaciones ahora pueden tener una prioridad. Cada actualización que haces en la aplicación sigue siendo por defecto urgente, pero lo que
React ahora también soporta son actualizaciones no urgentes, y las actualizaciones no urgentes automáticamente no bloquean la página, no importa cuánto tiempo tomen. Vamos
Comments