Las aplicaciones de múltiples páginas han avanzado mucho. El navegador ayuda increíblemente. Hay algo llamado paint-holding, así que si estás en una página y vas a la siguiente página, el navegador no muestra la siguiente página hasta que esté lista. Puedes hacer trucos geniales con el streaming donde puedes mostrar el shell de la aplicación de inmediato el contenido y mostrar cargadores y cosas en aplicaciones de múltiples páginas. Se siente casi como una aplicación del lado del cliente. Pero hay compensaciones. Estás cargando todos tus scripts de anuncios nuevamente. No puedes hacer animaciones geniales, ¿verdad? Todavía hay razones por las que querrías enrutamiento del lado del cliente, ¿verdad?
Afortunadamente, es posible que hayas escuchado algunas noticias, este gif se ve terriblemente grande, pero esencialmente, ¿qué tal la API de transición de vista o flamethrower o turbo? Han estado usando esto en la comunidad de Rails durante algunos años, ¿verdad? Básicamente reemplaza tu HTML sin recargar toda la página. Bueno, en la superficie, esto tiene mucho sentido. Si tienes un sitio estático que construiste donde cada página es independiente, y ahora quieres cambiar entre esas páginas, esto funciona muy bien. Pero es un poco más complicado cuando quieres persistir el estado, cuando estás tratando de construir algo que realmente sea una aplicación. No me refiero a mantener tu reproductor de video reproduciendo entre páginas. Puedes hacer eso. Estoy hablando de estado compartido, como cosas que pones en una tienda global, ¿verdad? Incluso puedes mantener islands o referencias entre páginas. Es un poco complicado en algunos de estos frameworks, tienes que ser explícito sobre IDs, pero estos son solucionables.
¿Qué quiero decir con el problema del estado? Si alguna vez te has preguntado, estoy usando sintaxis tipo React, pero quiero que entiendas si vas y renderizas una página en el servidor, inicialmente, el estado del cliente será nada, ¿verdad? Si pudieras pretender que teníamos un contador que comenzaba en cero, renderizas en el servidor, muestra la primera ruta de código, y estás bien. Pero si ahora estás en el cliente, y haces clic en el contador diez veces, y ahora el conteo es diez, y vas a la siguiente página y cargas este componente, ¿cómo sabe el servidor que es diez? Generalmente no lo sabe. A menos que lo codifiques en la URL. Básicamente, verá cero nuevamente, renderizará en este caso, si es cero, renderizará algún otro componente, y luego llegas al cliente, y el cliente va a despertarlo para hidratarlo, y piensa que algún componente debería estar allí, y ¿qué crees que obtenemos? No sé si has visto este antes. Esto es de Next, para ser justos, pero creo que todos hemos visto este error si hemos hecho alguna renderización del servidor, generalmente hablando. Los errores de hidratación son bastante dolorosos, y la verdad es que la hidratación perezosa es prácticamente siempre una perspectiva peligrosa, porque, en cualquier momento, si los datos en el cliente cambian entre el momento en que lo renderizaste en el servidor, y lo interactúas, probablemente se romperá. Esto no se restringe al enrutamiento. Esto es algo de lo que tenemos que ser conscientes. Ahora, nuevamente, podemos resolver esto. Podemos ser selectivos sobre cuándo renderizar componentes en el servidor o cuándo renderizarlos en el cliente. Mi punto es, comienzas a seguir este camino donde algo que es simple como poner una island en la página comienza a volverse complicado, ¿verdad? porque las divides en piezas más pequeñas, ahora necesitas compartir un estado. Quieres compartirlo entre páginas. Básicamente terminas construyendo un framework sobre un framework. Entonces, ¿qué pasa si comienzas con todas estas suposiciones ya en su lugar, y tal vez te encargas de algunas otras? Podrías terminar con algo como esto. ¿Verdad? Y esas cosas adicionales que no mencioné antes, como cómo manejas, ya sabes, datos asíncronos? ¿Cómo manejas cosas como el streaming fuera de orden, coordinando entre las diferentes islands?
Comments