De hecho, hay muchos tipos de aplicaciones que puedes construir solo con código de front end. Ahora solo tienes que tomar tres decisiones tecnológicas o incluso menos. Y tienes muy poco que desplegar porque, de nuevo, solo podrías necesitar desplegar un front end estático y tal vez algunos trabajadores de back end ligeros, no toda una pila.
¿Cómo puede ser esto posible? El primer ingrediente que tuve que descubrir que realmente me dio la idea de construir un framework como este y que me hizo pensar de esta manera diferente es algo llamado CRDTs. Puede que hayas oído hablar de ellos o no. La abreviatura significa tipos de datos replicados sin conflictos. Y una forma muy rápida y simple de pensar en ellos es que son Git para datos.
Para ser más preciso, es un Git súper rápido para muchos datos pequeños. Y puedes ejecutarlo en el cliente. Y eso es realmente lo que hace que cosas difíciles como de las que hablé antes, sean realmente fáciles de repente. Por ejemplo, multijugador en tiempo real. Bueno, y si tienes un Git súper rápido para muchos datos pequeños, creo que puedes imaginar cómo podrías construir experiencias multijugador en tiempo real sobre eso. Simplemente compartes las ediciones y todos terminarán con los mismos datos y puedes hacer eso en tiempo real. Podrías estar preguntando, bueno, parte del multijugador en tiempo real es tener presencia de usuario, así que puedes ver los cursores de otros usuarios y demás. ¿Cómo añadirías eso? Bueno, los cursores son realmente solo más datos pequeños, así que simplemente también los pones en el CRDT y es súper rápido, así que puedes ver los cursores de otras personas u otros tipos de presencia de usuario en tiempo real. Así que, multijugador en tiempo real y presencia resueltos.
¿Qué hay de la sincronización entre dispositivos? Bueno, si piensas en cómo usas Git, podrías trabajar en el mismo repositorio en diferentes dispositivos y luego simplemente usar empujes y tirones explícitos para llegar al mismo estado en todas partes. Y lo mismo es cierto para los CRDTs, excepto que sucede automáticamente en tiempo real. Soporte offline, misma historia. Por supuesto, puedes usar Git offline. Puedes trabajar sin internet, hacer algunos commits, subirlos y todo funciona y los CRDTs son exactamente lo mismo. De nuevo, porque es un Git súper rápido para muchos datos pequeños.
Si lo piensas, si trabajas offline en múltiples dispositivos simultáneamente o si diferentes personas trabajan offline en los mismos datos, inevitablemente te encontrarás con conflictos. Y aquí es donde entra la última propiedad realmente importante de los CRDTs, que es que básicamente tienen una fusión automática razonable incorporada. Así que, incluso si te desconectas, vuelves a conectarte, tus cambios se sincronizan, la mayoría de los conflictos se resolverán de una manera que esperarías como usuario. E incluso esta idea radical de cargas de archivos de usuario también se vuelve súper simple porque no puedes solo almacenar muchos datos pequeños en los CRDTs, en realidad también puedes almacenar datos grandes en ellos. Y luego esos datos grandes se sincronizan y comparten entre los usuarios al igual que todo lo demás. Así que, las cargas de archivos de usuario también son muy fáciles. Y podrías empezar a ver que aunque la arquitectura es muy diferente y podría parecer como esta loca nueva forma de construir aplicaciones, realmente quiero convencerte hoy de que es en realidad la única manera sensata de construir aplicaciones hoy en día.
Podrías estar preguntándote a continuación, bueno, ¿cómo funciona el compartir y cómo funcionan los permisos en este tipo de contexto? Y tradicionalmente haces esto aplicándolos de manera centralizada en el backend en el límite de la API.
Comments