- Uma linguagem declarativa que estende a sintaxe de HTML para criar interfaces web dinâmicas e reativas, oferecendo um ambiente de desenvolvimento familiar para quem já usa HTML
- Renderização em streaming permite enviar conteúdo imediatamente a partir do servidor e exibir a tela antes mesmo do carregamento do bundle de JavaScript no cliente
- Fine-grained bundling minimiza o envio de código desnecessário, melhorando desempenho e velocidade de carregamento
- Compilação otimizada por ambiente (targeted compilation) gera saídas eficientes para navegador e servidor
- Suporte integrado a TypeScript e recursos avançados de editor aumentam a produtividade de desenvolvimento e a qualidade do código
Visão geral do Marko
- Marko é uma linguagem declarativa que reimagina o HTML, com o objetivo de criar interfaces de usuário dinâmicas e reativas
- A maior parte do HTML válido pode ser usada no Marko sem alterações
- A sintaxe de HTML é estendida para permitir escrever aplicações modernas de forma declarativa
- Já é usado em produção em sites de grande tráfego como o eBay.com
- Se você conhece HTML, CSS e JavaScript, pode começar a usar imediatamente sem uma curva de aprendizado significativa
Principais recursos
- Renderização em streaming (Streaming) permite que o servidor envie imediatamente o conteúdo que estiver pronto
- A tela inicial pode ser exibida antes mesmo de o bundle de JavaScript do cliente ser carregado
- HTML, imagens e assets são carregados de forma assíncrona, proporcionando renderização rápida da primeira tela
- Fine-Grained Bundling envia apenas o código necessário
- Remove código não utilizado e evita hidratação desnecessária no nível de subtemplate
- Projetado com a filosofia “Lean by default, Fast by design”
- Suporte a compilação otimizada por ambiente (Targeted Compilation)
- Gera saídas otimizadas para cada ambiente, considerando as diferenças entre navegador e servidor
- Carregamento mais rápido, bundles menores e implementação em uma única linguagem unificada
Exemplos de código e sintaxe
Desempenho e escalabilidade
- Renderização inicial mais rápida (Faster First Paint) melhora a experiência do usuário
- Escalável (Scalable): pode evoluir com flexibilidade de templates HTML simples até estruturas complexas de componentes
- Runtime pequeno e compilador otimizado mantêm alto desempenho em diferentes condições de rede
Integração com TypeScript e ferramentas de desenvolvimento
- Suporte nativo a TypeScript oferece inferência de tipos robusta
- Mantém consistência de tipos entre templates e componentes
- O editor oferece autocompletar, ir para definição, destaque de sintaxe, formatação e outros recursos
- Detecta erros mais cedo e melhora a qualidade do código, oferecendo um ambiente de desenvolvimento estável
Conclusão
- Marko é uma linguagem moderna de desenvolvimento web que combina sintaxe amigável ao HTML, renderização de alto desempenho, bundling refinado e integração com TypeScript
- Funciona de forma eficiente tanto no servidor quanto no cliente, oferecendo escalabilidade e desempenho adequados para operar serviços de grande porte
2 comentários
Por enquanto, ainda seria Svelte.
Comentários no Hacker News
Espero que, no futuro, o próprio HTML passe a suportar todos os verbos HTTP sem JavaScript (como
PUTeDELETE), ofereça controles de entrada nativos como dropdown, multisseleção, data e hora, e permita enviar formulários sem recarregar a página inteiraQuando ouvi o nome htmx pela primeira vez, foi isso que imaginei, mas na prática ele ficou mais no nível do intercooler
Esse tipo de funcionalidade exige amplo suporte dos fabricantes de navegadores
Dá para ver mais sobre isso no projeto Triptych
Tendo criado frameworks JavaScript por conta própria, acho que o Marko é subestimado
As otimizações em tempo de compilação são muito impressionantes, e a documentação sobre fine-grained bundling também é excelente
Ele inclusive teve bons resultados numa comparação de desempenho de quadros Kanban
O React, ao se acoplar ao Next.js, traiu a essência da plataforma, e agora quase não há motivo para escolhê-lo
A época em que React hidratado estaticamente rodava sobre CDN era muito melhor
Ainda assim, fico com vontade de olhar o Marko também
Seria bom ver esse tipo de análise profunda também no lado de frameworks desktop como Electron
Gosto do React simplesmente porque ele é “apenas JavaScript”
Não gosto de sintaxes como
<let>ou<for>A gente só se acostumou tanto com ele que vale lembrar disso ao olhar para frameworks novos
Formas como
{% for user in users %}ou{#each users as user}são muito mais clarasJSX também não é perfeito — a sintaxe
{users.map(...)}continua sendo verbosaEsse também é um dos motivos da popularidade de Vue e Svelte
E, aliás, no Vue também dá para escrever só com JSX, se quiser
A DSL foi inchando, e com o aumento de hooks como useFormStatus e useActionState, tudo ficou mais complexo
Já a sintaxe do Marko é intuitiva, e funções parecem funções, variáveis parecem variáveis, então fica mais fácil de entender
Esse jeito de colocar JS dentro de HTML parece bem interessante
Ryan Carniato participou desse projeto e depois acabou liderando o SolidJS, então fico curioso para saber por que ele voltou para um estilo de HTML-in-JS
Os dois projetos evoluíram trocando ideias entre si, e ainda hoje continuam em contato
Muitos desenvolvedores já estão acostumados com ele, e o suporte em editores e no TypeScript já é muito bom
Depois de mais de 20 anos, parece que o front-end deu a volta completa e acabou retornando ao paradigma da era JSP
Na época isso era visto como cafona, mas no fim talvez fosse o caminho certo
Algumas coisas desaparecem, mas a criatividade da geração seguinte acaba criando algo novo
Só era preciso tomar cuidado com escalabilidade em grande escala
Dependendo da situação, outra abordagem pode ser mais adequada
Naquele momento, havia necessidade de apps móveis e de uma arquitetura centrada em APIs, e SPA atendia bem a essa demanda
O que vemos agora não é um retorno ao JSP, mas uma busca por um ponto de equilíbrio entre os dois lados
O Marko já é uma tecnologia comprovada no eBay
Uso há anos e nunca tive problemas
Já Facebook, Instagram e Messenger, baseados em React, vivem tendo bugs de interface
Quando se olha o resultado em serviços realmente grandes, a estabilidade do Marko se destaca
O Marko já apareceu várias vezes no HN
Houve threads relacionadas também em janeiro de 2023, agosto de 2017 e fevereiro de 2015
Parece uma sintaxe muito melhorada em relação ao JSX
Gosto especialmente da sintaxe concisa no estilo Pug, e fico me perguntando por que ela está escondida tão fundo na documentação
Documentação de Concise Syntax
Mas não gostei dos erros de highlighting na documentação nem da forma de separar atributos
Hoje em dia uso mais Svelte, mas continuo esperando uma sintaxe mais elegante
Sintaxe baseada em espaço pode ser boa, mas notações como
--e a dificuldade de parsing deixam a desejarA equipe do Marko chegou a criar e publicar um clone do Hacker News para apresentar o Marko 6
Ver exemplo no GitHub
Como parece uma linguagem feita para demo, é até engraçado que o texto em gradiente de “HTML-based” e “building web apps” não apareça