Creando un Navegador: Parte III MVP recap
Revisemos lo que hicimos la semana pasada.
Creamos nuestro MVP de navegador.
- Definimos como se escriben nuestras interfaces.
JSON
- Interpretamos el contenido
Parser
- Guardamos la interpretacion en el
appState
- Dibujamos en pantalla con los componentes que implementamos.
Renderer
En otras palabras: Creamos un loader
, un parser
y un renderer
Versión simplificada portable
Pega el siguiente código en la consola
de tu navegador y tendrás lo que hicimos la semana pasada.
Que podemos hacer con esto?
mmmm…
Si quisieras hacer aplicaciones como:
Figma
Miro
draw.io
Canva
Wix
Webflow
Flujo base
- defines el modelo de tu interfaz
- expones este modelo para que el usuario lo modifique
- dibujas el modelo segun tus necesidades en un
Renderer
Figma
Miro
tambien usa un <canvas>
draw.io
Maneja su renderer con <svg>
y no con <canvas>
.
Canva
Crea elementos html
directamente en el DOM.
Wix
Crea elementos html
y te los muestra en un iframe
.
cada vez que haces un cambio en el Editor, manda un mensaje al Backend, e backend actualiza el archivo y se actualiza el iframe
WebFlow
Hace lo mismo que Wix, HTML elements en un iframe
Para este tipo de aplicaciones puede que el Parser
no sea tan relevante como el Renderer
y la gestión de los elementos del lienzo.
Podemos decir que la complejidad se inclina hacia el Renderer
🤔 que otra cosa podríamos hacer ?
inclinarnos hacia el Parser.
Basados en un texto podemos extraer su significado segun nuestras reglas.
- Podemos simplificar la forma de publicar documentos en la web escribiendo archivos
markdown
- Podemos crear nuestro propio lenguaje de
templating
, comohandlebar
,Razor
,etc. - Podemos definir la sintaxis de nuestro propio lenguaje de programación.
- Podemos crear
Linters
y Prettiers
y muchas cosas más!.
Todo va a depender donde y que interpretar. (Puede ser ‘web’ o no).
Estos Legos (loader
,parser
,renderer
), son la puerta de entrada para crear
y comprender sistemas/productos más complejos.
Links para profundizar:
Volviendo con nuestro MVP
Nos faltan un millón de cosas xD!
- Actualmente solo leemos y mostramos la interfaz.
- No soportamos interacciones del usuario
- No se puede definir la apariencia y composición de los elementos de la interfaz
- Solo soportamos formas basicas (puntos, lineas, poligonos) , no soportamos imagenes, audio,…
- No podemos incorporar recursos externos (fuentes, imagenes,…)
- No leemos interfaces de maquinas externas.
- …
Todavia no alcanzamos a ser la Web 1.0
.
Somos la Web 0.6
, mas-menos xD
📒Backlog
- Permitir al usuario interactuar con la interfaz
Our own Event system
. - Permitir definir la apariencia y composición de las elementos de la interfaz
our own CSS implementation
. - Permitir la ejecución de código durante el consumo del contenido
our own scripting environment
. - Cargar nuestros archivos de interfaces desde un maquina remota/externa.
- LLevar registro del contenido consumido por usuario
- Agregar metricas de los procesos internos de nuestro navegador.
Si les tinca algo en particular, avisen.
🤔 esta semana estaré pensando con que seguir