- Un lenguaje declarativo que amplía la sintaxis de HTML para crear interfaces web dinámicas y reactivas, ofreciendo un entorno de desarrollo familiar para quienes ya usan HTML
- Renderizado en streaming para enviar contenido de inmediato desde el servidor y mostrar la interfaz incluso antes de que cargue el bundle de JavaScript del cliente
- Bundling de grano fino (fine-grained bundling) para minimizar el envío de código innecesario y mejorar el rendimiento y la velocidad de carga
- Compilación optimizada por destino (targeted compilation) para generar salidas eficientes tanto para el navegador como para el servidor
- Soporte integrado para TypeScript y amplias funciones de editor para mejorar la productividad y la calidad del código
Resumen de Marko
- Marko es un lenguaje declarativo que replantea HTML, con el objetivo de construir interfaces de usuario dinámicas y reactivas
- La mayoría del HTML válido puede usarse en Marko sin cambios
- Amplía la sintaxis de HTML para escribir aplicaciones modernas de forma declarativa
- Ya se utiliza en producción en sitios con tráfico a gran escala como eBay.com
- Si conoces HTML, CSS y JavaScript, puedes empezar a usarlo de inmediato sin una curva de aprendizaje adicional
Características principales
- Renderizado en streaming (Streaming) que permite al servidor enviar de inmediato el contenido que ya está listo
- La pantalla inicial puede mostrarse incluso antes de que cargue el bundle de JavaScript del lado del cliente
- HTML, imágenes y recursos se cargan de forma asíncrona para ofrecer un renderizado inicial más rápido
- Bundling de grano fino (Fine-Grained Bundling) para enviar solo el código necesario
- Elimina código no utilizado y omite hidratación innecesaria a nivel de subplantillas
- Diseñado bajo la filosofía “Lean by default, Fast by design”
- Soporte para compilación optimizada por destino (Targeted Compilation)
- Genera salidas optimizadas para cada entorno teniendo en cuenta las diferencias entre navegador y servidor
- Cargas más rápidas, bundles más pequeños y una sola lengua unificada para implementarlo todo
Ejemplos de código y sintaxis
Rendimiento y escalabilidad
- Mejora la experiencia de usuario con renderizado inicial más rápido (Faster First Paint)
- Escalable (Scalable): puede ampliarse con flexibilidad desde plantillas HTML simples hasta estructuras complejas de componentes
- Mantiene un alto rendimiento en distintos entornos de red gracias a un runtime pequeño y un compilador optimizado
Integración con TypeScript y herramientas de desarrollo
- Soporte integrado para TypeScript con sólida inferencia de tipos
- Mantiene la consistencia de tipos entre plantillas y componentes
- Ofrece funciones del editor como autocompletado, ir a definición, resaltado de sintaxis y formateo
- Proporciona un entorno de desarrollo estable al detectar errores antes y mejorar la calidad del código
Conclusión
- Marko es un lenguaje moderno de desarrollo web que combina una sintaxis amigable con HTML, renderizado de alto rendimiento, bundling preciso e integración con TypeScript
- Funciona de forma eficiente tanto en el servidor como en el cliente, y ofrece la escalabilidad y el rendimiento adecuados para operar servicios a gran escala
2 comentarios
Por ahora, parece que sigue siendo Svelte.
Comentarios en Hacker News
Ojalá que en el futuro el propio HTML soporte sin JavaScript todos los verbos HTTP (como
put,delete, etc.), ofrezca de forma nativa controles de entrada como listas desplegables, multiselección, fecha y hora, y permita enviar formularios sin recargar toda la páginaCuando escuché por primera vez el nombre htmx, esperaba algo así, pero en realidad estaba más al nivel de intercooler
Este tipo de funciones requiere un amplio soporte de los fabricantes de navegadores
Se puede ver más sobre eso en el proyecto Triptych
Como alguien que ha creado frameworks de JavaScript, creo que Marko está subestimado
Su optimización en tiempo de compilación es muy impresionante, y la documentación de explicación del bundling granular también es excelente
De hecho, también mostró buenos resultados en esta comparación de rendimiento de tableros Kanban
React, al unirse con Next.js, traicionó la esencia de la plataforma, y ahora casi ya no hay razones para elegirlo
La época en que React hidratado estáticamente corría sobre un CDN era mucho mejor
Aun así, me dan ganas de revisar también Marko
También estaría bien ver este tipo de análisis profundos del lado de frameworks de escritorio como Electron
La razón por la que me gusta React es simplemente porque “es solo JavaScript”
No me gusta ver sintaxis como
<let>o<for>Solo se siente así porque ya estamos demasiado acostumbrados; conviene recordarlo al ver un framework nuevo
Formas como
{% for user in users %}o{#each users as user}son mucho más clarasJSX tampoco es perfecto — la sintaxis
{users.map(...)}sigue siendo verbosaEsa es también una de las razones por las que Vue o Svelte son populares
Por cierto, Vue también se puede escribir solo con JSX si así lo quieres
Su DSL se ha ido inflando, y con hooks como useFormStatus o useActionState se ha vuelto más complejo
En cambio, la sintaxis de Marko es intuitiva, y las funciones se ven como funciones, las variables como variables, así que es más fácil de entender
La forma de meter JS dentro de HTML se siente bastante fresca
Ryan Carniato participó en este proyecto y después pasó a liderar SolidJS, así que me da curiosidad por qué volvió otra vez al estilo de HTML-in-JS
Ambos proyectos evolucionaron compartiendo ideas entre sí y todavía siguen en contacto
Muchos desarrolladores ya lo conocen, y el soporte en editores y TypeScript ya está bastante bien resuelto
Después de más de 20 años, da la impresión de que el frontend ha dado tantas vueltas que terminó regresando al paradigma de la era de JSP
En ese entonces se le veía como algo “anticuado”, pero al final parece que era lo correcto
Algunas cosas desaparecen, pero la creatividad de la siguiente generación produce algo nuevo
Eso sí, había que tener cuidado con la escalabilidad a gran escala
Según el contexto, otros enfoques pueden ser más adecuados
En ese momento hacían falta apps móviles y arquitecturas centradas en APIs, y SPA respondía a esa necesidad
Lo de ahora no es un regreso a JSP, sino un proceso para encontrar un punto de equilibrio entre ambos lados
Marko ya es una tecnología probada en eBay
Lo he usado durante años y nunca tuve problemas
En cambio, Facebook, Instagram y Messenger, basados en React, no dejan de tener errores de UI
Si se ven los resultados en servicios reales a gran escala, la estabilidad de Marko destaca
Marko ya ha aparecido varias veces en HN
También hubo hilos relacionados en enero de 2023, agosto de 2017 y febrero de 2015
Parece una sintaxis mucho mejorada frente a JSX
En especial me gusta la sintaxis concisa estilo Pug, y me pregunto por qué la escondieron tan adentro en la documentación
Documentación de Concise Syntax
Pero no me gustaron los errores de resaltado en la documentación ni la forma de distinguir atributos
Últimamente uso sobre todo Svelte, pero sigo esperando una sintaxis más elegante
La sintaxis basada en espacios está bien, pero detalles como la notación
--o la dificultad de parseo dejan que desearEl equipo de Marko incluso creó y publicó directamente un clon de Hacker News para presentar Marko 6
Ver ejemplo en GitHub
Siendo un lenguaje hecho para demos, da un poco de risa que no se vea el texto con degradado de “HTML-based” y “building web apps”