Frameworks Frontend Sem JavaScript (HTMX, Phoenix LiveView)
Introdução
Os frameworks frontend são ferramentas fundamentais no desenvolvimento de software, pois permitem a criação de interfaces usuário eficientes e escaláveis. No entanto, grande parte dos frameworks frontend é baseada em JavaScript, o que pode não ser a melhor escolha para todos os projetos.
Com a crescente demanda por aplicações web mais rápidas e responsivas, os desenvolvedores buscam alternativas mais eficientes e escaláveis. Nesse contexto, surgem frameworks como HTMX e Phoenix LiveView, que permitem o desenvolvimento de interfaces usuário sem necessidade de JavaScript.
Esses frameworks são especialmente úteis em projetos que exigem uma abordagem mais simples e direta no desenvolvimento da interface usuário, onde a complexidade introduzida pelo JavaScript pode ser um obstáculo. Além disso, eles oferecem uma forma eficiente de criar interfaces reativas sem o overhead de bibliotecas JavaScript.
Nesse artigo, vamos explorar os principais conceitos e características desses frameworks, abordando seus pontos fortes e vulnerabilidades em relação a outros métodos tradicionais de desenvolvimento frontend. Ao final desta leitura, você estará capacitado a avaliar a adequação dessas ferramentas para o seu próprio projeto.
O que é e por que importa
HTMX e Phoenix LiveView são frameworks frontend que permitem a criação de interfaces usuário sem necessidade de JavaScript. HTMX é um framework focado em criar experiências de interface usuário reativas, utilizando solicitações HTTP para atualizar a página, enquanto Phoenix LiveView é uma biblioteca desenvolvida sobre Elixir e Phoenix Framework, que permite a criação de aplicativos web interativos com suporte a múltiplos clientes simultâneos.
Ambas as ferramentas visam resolver problemas relacionados à complexidade do JavaScript em aplicações frontend. Muitas vezes, o uso de bibliotecas JavaScript adiciona overhead e complica a manutenção do código, especialmente em projetos que exigem alta escalabilidade e performance. Além disso, os desenvolvedores podem enfrentar desafios ao lidar com problemas como ciclos de vida da aplicação, estado e comunicação entre componentes, o que pode levar a um código mais difícil de manter.
Os principais motivos pelos quais essas ferramentas são importantes incluem:
- Permite a criação de interfaces usuário reativas sem a necessidade de bibliotecas JavaScript, tornando-a uma opção mais leve e escalável;
- Oferece suporte a múltiplos clientes simultâneos, o que é especialmente útil em aplicações que exigem alta escalabilidade;
- Reduz a complexidade do código frontend ao evitar a necessidade de lidar com ciclos de vida da aplicação, estado e comunicação entre componentes;
Em resumo, HTMX e Phoenix LiveView são ferramentas poderosas que permitem aos desenvolvedores criar interfaces usuário mais eficientes, escaláveis e fáceis de manter.
Como funciona na prática
HTMX funciona enviando solicitações HTTP para atualizar a página dinamicamente, em vez de depender de bibliotecas JavaScript que manipulam o DOM direta e indiretamente.
Etapas do funcionamento interno:
- O código cliente: O HTMX é incluído no HTML da página. Quando um evento ocorre (por exemplo, clique em um botão), ele identifica a TAG específica que contém a solicitação para atualizar;
- Envio de solicitações HTTP: A TAG com a solicitação é adicionada a uma lista de elementos da página que devem ser verificados. Quando o elemento for clicado, HTMX irá enviar um pedido HTTP para uma URL específica no servidor para obter dados.
- Atualização da página: O código do servidor pode retornar os dados solicitados por volta da solicitação anterior e atualizar a parte da página com essas informações ou redirecionar a página completamente.
Por outro lado, o Phoenix LiveView utiliza-se de Elixir e o servidor para gerenciar as atualizações da interface e lidar com os eventos do cliente. A ideia é enviar dados ao cliente e atualizar partes da página através de solicitação HTTP que são feitas pelo LiveView Server.
Etapas do funcionamento interno:
- Criação das aplicações: É necessário criar as aplicações em Elixir, com o framework Phoenix, onde irão definir quais comportamentos podem ser alcançados, e os elementos a serem renderizados no cliente.
- Gerar código HTML: Com base nos dados fornecidos pelo servidor, gerar o conteúdo da página, mantendo sincronizado as atualizações com o servidor.
O LiveView utiliza-se do protocolo WebSockets para fazer o acompanhamento das atualizações da aplicação e enviar informações ao cliente.
Exemplo real
O HTMX permite atualizar partes da página sem recarregar a página inteira, tornando-o ideal para aplicações que precisam de uma experiência mais interativa e ágil.
<!-- index.html -->
<!DOCTYPE html>
<html lang="pt-BR">
<head>
<meta charset="UTF-8">
<title>Exemplo HTMX</title>
</head>
<body>
<!-- Botão que dispara a solicitação para atualizar a parte da página -->
<button id="botao" hx-get="/dados" hx-target="#conteudo">Carregar dados do servidor</button>
<!-- Div onde os dados serão carregados e exibidos -->
<div id="conteudo"></div>
</body>
</html>
// scripts.js
import { htmx } from "htmx";
document.addEventListener("DOMContentLoaded", function () {
// Carregar dados do servidor quando o botão for clicado
const botao = document.getElementById('botao');
botao.addEventListener('click', async (event) => {
const resposta = await fetch('/dados');
const dados = await resposta.json();
document.getElementById("conteudo").innerHTML = `
<h2>Dados do servidor</h2>
<p>Nome: ${dados.nome}</p>
<p>E-mail: ${dados.email}</p>
`;
});
});
// app.exlixir (com o Phoenix)
defmodule MyAppWeb.Router do
def routes do
scope "/", MyAppWeb do
pipe_through [:browser]
get "/dados", PageController, :dados
end
end
end
defmodule PageController do
use MyAppWeb, :controller
def dados(conn, _) do
nome = "João"
email = "joao@email.com"
conn
|> render("dados.html", %{nome: nome, email: email})
end
end
Boas práticas
Trabalhar com a documentação oficial e recursos de comunidade
- Leia a documentação oficial de HTMX, Phoenix LiveView e bibliotecas relacionadas para entender as melhores práticas de implementação.
- Participe das comunidades de desenvolvedores dessas tecnologias para trocar dicas e soluções para problemas comuns.
- Mantenha-se atualizado sobre novas características e melhorias nas bibliotecas.
Estruturação do código
- Use a estrutura de diretórios e arquivos recomendada pelas bibliotecas, como por exemplo a organização de templates em subpastas dentro da pasta
views. - Utilize importações e exportações claras para evitar confusões.
- Segue a convenção de nomenclatura sugerida pelo framework.
Armadilhas comuns
O problema do estado local
- Evite usar o storage local para armazenar dados que precisam ser compartilhados entre requisições, pois isso pode causar problemas ao usar tecnologias como Phoenix LiveView.
- Em vez disso, use o estado gerenciado pelo framework ou bibliotecas específicas.
Conflitos de versões
- Certifique-se de manter as bibliotecas e frameworks atualizados, para evitar conflitos de versão e compatibilidade entre elas.
- Use ferramentas como
npm shrinkwrapouyarn.lockpara garantir a consistência das dependências.
Desempenho
- Lembre-se de que, embora as tecnologias utilizadas permitam uma experiência mais interativa, podem afetar o desempenho do aplicativo caso não seja usado corretamente.
- Optimize o uso de requisições e atualizações da página para evitar sobrecarga no servidor.
Conclusão
Ao trabalhar com frameworks frontend sem JavaScript, como HTMX e Phoenix LiveView, é crucial entender as melhores práticas de implementação, manter-se atualizado sobre novas características e melhorias nas bibliotecas e estar ciente dos desafios específicos de cada tecnologia. Além disso, é importante estruturar o código de forma organizada, utilizar importações e exportações claras e seguir convenções de nomenclatura sugeridas pelo framework.
Se você está considerando migrar seu projeto para essas tecnologias, é recomendável:
- Leia as documentações oficiais e participe das comunidades de desenvolvedores.
- Teste diferentes abordagens e escolha a que melhor se adequa ao seu projeto.
- Aprenda a utilizar ferramentas como
npm shrinkwrapouyarn.lockpara gerenciar dependências.
Ao abordar esses pontos, você estará preparado para aproveitar as vantagens desses frameworks sem JavaScript e construir experiências mais interativas e eficientes.
Referências
- Fowler, M. Patterns of Enterprise Application Architecture. https://martinfowler.com/books/eaa.html.
- Alvaro Videla. HTMX Documentation. Disponível em: https://htmx.org/docs/. Acesso: 2024.
- MDN Web Docs. Web Sockets API. Disponível em: https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API. Acesso: 2024.
- ThoughtWorks. Designing Data Intensive Applications. Disponível em: https://www.thoughtworks.com/insights/blog/designing-data-intensive-applications. Acesso: 2024.
- Kim Mäenpää. Phoenix LiveView Documentation. Disponível em: https://hexdocs.pm/phoenix_live_view/. Acesso: 2024.