Ahora, de lo que hemos hablado hasta ahora era solo una característica concurrente, useTransition. También hay otra característica concurrente, que es menos conocida, y es suspense durante la hidratación de rect. Entonces, si no estás familiarizado con la hidratación de rect, el proceso de hidratación de rect es básicamente un proceso cuando renderizas un sitio en el servidor, luego en el cliente hidratas ese sitio, renderizando de nuevo cada componente de rect, adjuntando oyentes de eventos al DOM ya existente, y luego obtienes el conjunto en vivo. Ahora, la hidratación en mi experiencia es típicamente la operación más costosa de JavaScript que podría tener la aplicación de rect, simplemente porque rect tiene que renderizar cada uno de los componentes que existen en la página, como, por ejemplo, aquí está delivery gastando 1.55 segundos hidratando el sitio con un estrangulamiento de CPU 4x, o aquí está Notion gastando 1.8 segundos, o aquí está Walmart gastando 1.1 segundos, y no pretendo burlarme de este sitio web o de estos equipos. Esto es una situación estándar. Cada sitio de React tiene esto. Así es como funciona la hidratación de rect. Y lo que esto significa para la interacción hasta el Próximo Pintado es que, si haces clic en algún lugar de la página durante la hidratación, entonces el navegador no procesará ese clic y no repintará esa pantalla hasta que se complete la hidratación porque el navegador está simplemente bloqueado ejecutando la hidratación, y eso podría suceder. La hidratación podría terminar medio segundo o un segundo después. Entonces eso resulta en un tiempo terrible de interacción hasta el Próximo Pintado, pero lo que React18 ahora te permite es tomar tu sitio e hidratarlo de manera concurrente. De la misma manera que use transition funciona para las interacciones, suspense funciona para la hidratación. Para hacer esto, necesitas tomar tu página, como esta página de inicio de Notion, por ejemplo, dividir esa página en secciones, como un encabezado, un bloque de héroe, más secciones, algunas más abajo, y envolver cada una de las secciones con suspense, lo que básicamente haría el corte así. Y entonces lo que sucedería ahora sería básicamente lo siguiente. Llamarías a hydrate root. Rect comenzará a renderizar los componentes uno por uno hasta que en algún momento se tropiece con el límite de suspense, que marca la hidratación no bloqueante, y cuando rect se tropiece con este límite, no procedería más allá de ese límite todavía. Seguiría renderizando los componentes argent restantes hasta que termine, y luego finalmente renderizará los no argent devolviendo el control al navegador cada cinco milisegundos. Entonces, si envuelves cada sección de la página con start-transition, lo que sucedería es que cada sección de la página se hidrataría de manera no concurrente devolviendo el control, lo siento, de manera concurrente devolviendo el control al navegador cada cinco milisegundos. Justo como usamos transition. Ahora podrías preguntar, okay, si esto es tan bueno, si esto hace que la página se hidrate de manera no bloqueante, ¿por qué necesito molestar con secciones? ¿Por qué no envuelvo toda la página con suspense? Y la respuesta es que, en realidad, arruinaría tu INP. ¿Por qué? Esto tiene que ver con otro comportamiento de suspense de React18. No tiene realmente un nombre, pero yo lo llamo hidratación argent forzada. El desafío detrás de esto es que en el momento en que haces clic en algún botón de suspense, React lo cambia de nuevo a hidratación argent, por lo que si envuelves toda la página con suspense, se hidratará así, 5 milisegundos a la vez, pero si haces clic en ella justo cuando se está hidratando, React cambiará a la hidratación argent para toda la página, lo que significa que el próximo pintado no sucederá hasta que toda la página esté hidratada, mientras que si solo envuelves secciones separadas de la página con suspense, lo que te dará un renderizado que se ve así, y luego haces clic en algún límite de suspense, entonces solo ese límite de suspense se hidratará de manera argent, lo que tomará mucho menos tiempo y hará que el primer renderizado después del clic ocurra mucho antes y hará que tu interacción para expandir sea mucho más corta. Entonces, por eso no quieres envolver toda la página con suspense. Muy bien, entonces estas son las dos grandes características concurrentes de React. Así es como funcionan y así es como ayudan con el INP. Tómalas, toma tu INP y haz que tu INP sea verde. Gracias. Gracias por las preguntas. La primera dice, ¿hay alguna razón para no envolver la mayoría de las actualizaciones de estado en start transition? Esa es en realidad una gran pregunta. Espera,
Comments