No ves problemas con la experiencia del usuario. Y este es todo el código fuente del scheduler que acabo de compartir. Así que, ni siquiera son cuatro líneas. Y destacaría esta parte que es básicamente donde estoy cambiando entre tres estados diferentes. Así que, puede estar idle y luego puede estar pending y luego puede estar done. Verás que estoy lanzando algunas promises porque quiero que esté listo para suspense para que veas la ejecución de suspense. Y lo que puedes ver es que... Espera, ¿acabamos de hacer algo que suena como used transition?
Así que, volvamos al código original. Y ahora hagamos este start transition que está en React 18, como probablemente viste. Veamos cómo se ve esto. Verás que, sí, hizo como un poco al principio, pero tengo una experiencia realmente similar. Así que, sí, lo hicimos, usando algo de magia de coroutines. Y cuando empiezo a pensar en, en React, no hay uso de WebWorkers o WASM o cualquier cosa para el paralelismo. Entonces, ¿cómo se siente React así? Así que, lo que tenemos es este modelo comparativo de multitarea, donde tienes, sí, tienes un solo hilo de renderizado, pero es interrumpible. Y el renderizado puede entrelazarse con otras tareas. Y también, otras tareas podrían ser otras tareas de renderizado. Así que, en nuestro ejemplo, es así. Tuvimos esta tarea de renderizado original, y luego tuvimos esta entrada de usuario que, por supuesto, tiene alta prioridad, para que la UI sea responsiva. Y luego tienes la prioridad correcta para manejar la prueba, pero luego puedes reanudar la original. Y lo genial es que cualquier actualización puede ocurrir en segundo plano. Así que, bloquearía la respuesta a la nueva entrada. Y el scheduler no es lo suficientemente inteligente como para cambiar al más usable, luego después de que termine, reanudar el otro que tenías. Y mi hecho favorito sobre eso es que cede la ejecución de vuelta al hilo principal cada cinco milisegundos. Y la primera vez que descubrí esto, fue como, OK, pero ¿por qué cinco es como, esos números mágicos de CSS que usamos a veces? Y no lo es. De hecho, la cosa es que es lo más pequeño que puedes encajar en un solo frame, incluso en dispositivos de 120 FPS. Así que por eso se siente como si no bloqueara las animaciones. Y para ser honesto, la segunda cosa es que la mayoría de los componentes individuales, no tardan más que eso. No es como si, en el día a día, tuviéramos que iterar hasta un millón en nuestros componentes o algo así.
Así que en la práctica, sí, el renderizado es efectivamente interrumpible. Y una de mis partes favoritas, los effect handlers, así que una visión general de eso es que estaba buscando en Google eso cuando lo vi por primera vez, vi que básicamente los efectos son esta cosa que pide al entorno de llamada manejar una tarea particular.
Comments