Frontend & Mobile Nathan Geeksman

htmx: o retorno do HTML como linguagem de aplicação

htmx: o retorno do HTML como linguagem de aplicação

htmx: o retorno do HTML como linguagem de aplicação

Introdução

O cenário do desenvolvimento de software tem sido cada vez mais dominado por linguagens como JavaScript, Python e Ruby. No entanto, recentemente houve um ressurgimento de interesse em tecnologias que permitem a manipulação direta do HTML no lado cliente. Iniciativas como o htmx vêm revigorando discussões sobre a eficácia dos padrões MVC (Modelo-Visão-Controlador) e a necessidade de uma abordagem mais robusta na construção de interfaces web. Este artigo vai explorar as principais características do htmx, discutindo como ele reafirma o potencial do HTML como linguagem de aplicação em si mesmo.

Contexto atual

Com a ascensão das tecnologias SPA (Aplicativos de Interface Unificada), os desenvolvedores têm se visto cada vez mais pressionados a implementar soluções escaláveis e performáticas. O uso de frameworks JavaScript robustos como Angular, React e Vue.js tem sido amplamente difundido em todo o espectro do desenvolvimento web. No entanto, com essa onda de tecnologia emergente, questionamentos sobre a necessidade de camadas adicionais de abstração começam a surgir.

O papel do HTML

É sabido que o HTML é uma linguagem fundamental para a estruturação das páginas na web. Sua simplicidade e flexibilidade tornaram-no um padrão de larga aceitação no desenvolvimento de conteúdo web. No entanto, com a complexificação dos requisitos das aplicações web modernas, o HTML tem sido cada vez mais marginalizado em favor de linguagens mais poderosas e flexíveis como JavaScript.

O que vamos explorar

Este artigo pretende examinar as características principais do htmx, destacando como ele permite ao desenvolvedor trabalhar com HTML de forma mais eficaz, mantendo a simplicidade e a facilidade de manutenção associadas à linguagem. Vamos explorar exemplos práticos que demonstram como o uso do htmx pode otimizar processos de desenvolvimento, melhorando a produtividade sem comprometer a performance das aplicações.

O que é e por que importa

O htmx é uma biblioteca JavaScript que permite ao desenvolvedor trabalhar com HTML de forma mais eficaz, otimizando a interação entre página e backend sem a necessidade de frameworks JavaScript complexos. Ele reativa o potencial do HTML como linguagem de aplicação em si mesmo.

O htmx resolve problemas associados à complexidade das aplicações web modernas ao fornecer uma camada de abstração que permite a integração direta com servidores e APIs sem a necessidade de framework JavaScript robusto. Com o htmx, os desenvolvedores podem criar interfaces web ricas e interativas utilizando apenas HTML, sem precisar lidar com a complexidade de frameworks JavaScript como Angular ou React.

O Request e Response Body são dois conceitos-chave do htmx. O Request é responsável por realizar requisições HTTP para servidores e APIs, enquanto o Response Body permite que os desenvolvedores trabalhem com a resposta recebida dos servidores de forma eficiente. Essa integração direta com os servidores elimina a necessidade de frameworks JavaScript complexos, tornando o processo de desenvolvimento mais rápido e escalável.

Além disso, o htmx também é conhecido por sua capacidade de realizar atualizações dinâmicas da página sem a necessidade de carregar toda a página novamente. Isso é feito através do Ajax (Asynchronous JavaScript and XML), que permite à aplicação se comunicar com o servidor sem interrupção, otimizando a experiência do usuário.

A principal motivação por trás do desenvolvimento do htmx foi a necessidade de simplificar o processo de desenvolvimento web e reduzir a complexidade associada às aplicações modernas. Com o htmx, os desenvolvedores podem focar na criação de aplicações ricas e interativas sem precisar lidar com as complicações de frameworks JavaScript robustos.

A importância do htmx é que ele permite aos desenvolvedores trabalhar com HTML de forma mais eficaz, mantendo a simplicidade e a facilidade de manutenção associadas à linguagem. Além disso, o htmx também ajuda a reduzir a dependência dos frameworks JavaScript complexos, tornando as aplicações mais escaláveis e performáticas.

Como funciona na prática

O funcionamento interno do htmx é baseado em três principais conceitos: Requests, Responses e Actions.

Etapas de funcionalidade

  • 1. Tratamento de Eventos: Quando um evento ocorre no navegador (por exemplo, clique em um botão), o htmx detecta a necessidade de atualizar a página;
  • 2. Identificação da Ação: O htmx identifica qual ação deve ser executada com base na estrutura do HTML;
  • 3. Envio da Requisição: Uma requisição HTTP é enviada para o servidor, contendo os dados necessários para atualizar a página (por exemplo, ID do registro clicado);
  • 4. Processamento da Requisição: O servidor processa a requisição e retorna uma resposta no formato de JSON;
  • 5. Atualização da Página: A resposta recebida é interpretada e aplicada à página atualizada, sem necessidade de carregar toda a página novamente.

Essas etapas permitem que o htmx execute atualizações dinâmicas na página sem interrupção, otimizando a experiência do usuário.

Exemplo real

Vamos considerar um exemplo prático de como usar o htmx para criar uma tabela que atualiza dinamicamente ao clicar em um registro.

Suponha que temos uma página que lista os funcionários de uma empresa, com informações como nome, e-mail e telefone. Ao clicar em um registro, a página deve atualizar mostrando os detalhes do funcionário selecionado.

<!-- index.html -->
<!DOCTYPE html>
<html lang="pt-BR">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Funcionários</title>
    <script src="https://unpkg.com/htmx.org@1.7.2/dist/htmx.min.js"></script>
</head>
<body>
    <h1>Lista de Funcionários</h1>
    <table id="tabela-funcionarios">
        <thead>
            <tr>
                <th>Nome</th>
                <th>E-mail</th>
                <th>Tel.</th>
                <th>Ações</th>
            </tr>
        </thead>
        <tbody id="corpo-tabela">
            <!-- dados da tabela aqui -->
        </tbody>
    </table>

    <div id="detalhes-funcionario" style="display: none;">
        <h2>Detalhes do Funcionário</h2>
        <p id="nome-funcionario"></p>
        <p id="email-funcionario"></p>
        <p id="telefone-funcionario"></p>
    </div>

    <script src="index.js"></script>
</body>
</html>
// index.js
htmx.on('load', function(event) {
  if (event.detail.html.includes('<tr>')) {
    const registros = event.target.querySelectorAll('tr');
    registros.forEach(registro => registro.addEventListener('click', (e) => {
      e.preventDefault();
      const idFuncionario = registro.querySelector('.id-funcionario').textContent;
      fetch(`/detalhes/${idFuncionario}`)
        .then(response => response.json())
        .then(data => {
          document.getElementById('nome-funcionario').innerHTML = data.nome;
          document.getElementById('email-funcionario').innerHTML = data.email;
          document.getElementById('telefone-funcionario').innerHTML = data.telefone;
          document.getElementById('detalhes-funcionario').style.display = 'block';
        });
    }));
  }
});
<!-- detalhes.html (retorno do servidor) -->
<!DOCTYPE html>
<html lang="pt-BR">
<head>
    <meta charset="UTF-8">
</head>
<body>
    <!-- dados de detalhes aqui, em formato JSON -->
    {
      "nome": "João da Silva",
      "email": "joao.silva@example.com",
      "telefone": "(11) 1234-5678"
    }
</body>
</html>

Nesse exemplo, o htmx é usado para atualizar a página ao clicar em um registro da tabela. Ao receber o retorno do servidor com os detalhes do funcionário, a página é atualizada mostrando as informações solicitadas.

Note que, nesse caso, não há necessidade de usar frameworks JavaScript complexos ou lidar com complicações de desenvolvimento. O htmx cuida de tudo para nós!

Boas práticas

Use htmx junto a outros frameworks e bibliotecas

  • A integração de htmx com outros frameworks ou bibliotecas pode ser uma ótima estratégia, pois permite aproveitar as funcionalidades desses recursos sem abandonar a simplicidade do htmx.

Utilize a cacheação localmente para melhor desempenho

  • Para melhorar o desempeho, utilize a cacheação localmente para armazenar as respostas de requisições HTTP. Isso pode ser feito utilizando o componente hx-cache e definindo uma política de cache específica.

Utilize o atributo "defer" nos scripts

  • O htmx suporta a utilização do atributo "defer" nos scripts, que permite que os scripts sejam carregados após a página ter sido completamente carregada. Isso pode ajudar a evitar problemas de renderização da página.

Armadilhas comuns

Não confunda o atributo "hx-trigger" com "onclick"

  • O atributo hx-trigger é utilizado para disparar eventos htmx, mas não deve ser confundido com a propriedade nativa JavaScript onclick. Em vez disso, utilize hx-trigger="click" para definir que um evento será disparado quando o elemento for clicado.

Não utilize o htmx em conjunto com frameworks que manipulem a DOM

  • Embora seja possível utilizar o htmx em conjunto com outros frameworks, é importante evitar frameworks que manipulem a DOM, pois isso pode causar conflitos com as funcionalidades do htmx. Em vez disso, utilize um framework que forneça uma API de renderização mais leve.

Conclusão

O retorno do HTML como linguagem de aplicação é uma tendência promissora, e o htmx é um dos principais protagonistas desse movimento. Ao integrar htmx a outros frameworks ou bibliotecas, você pode aproveitar as funcionalidades desses recursos sem abandonar a simplicidade do htmx.

É importante lembrar que a cacheação localmente e o uso do atributo "defer" nos scripts podem melhorar significativamente o desempenho da aplicação. Além disso, é fundamental evitar armadilhas comuns como confundir o atributo hx-trigger com a propriedade nativa JavaScript onclick, ou utilizar htmx em conjunto com frameworks que manipulem a DOM.

Para aprofundar conhecimento sobre o tema, é recomendável explorar os recursos de documentação do htmx e experimentar com diferentes estratégias de integração. Além disso, é importante estar atento às novas funcionalidades e melhorias constantemente lançadas pelo desenvolvedor do framework.

Ainda há muito a ser explorado sobre o potencial do htmx em aplicações complexas, então não perca a oportunidade de se aventurar nesse universo promissor!

Referências

  • Martin Fowler: "Presentation Patterns". Disponível em: https://martinfowler.com/books/presentationPatterns.html. Acesso: 2024.
  • 12factor.net: "Frameworks and Libraries" . Disponível em:https://12factor.net/frameworks-libraries. Acesso: 2024.
  • OWASP: "HTML5 Security Considerations". Disponível em: https://owasp.org/www-community/vulnerabilities/HTML5_Security_Considerations. Acesso: 2024.
  • Thoughtworks.com: "How to Use htmx in Your Next Project" . Disponível em:https://www.thoughtworks.com/en/blog/how-use-htmx-your-next-project. Acesso: 2024.
  • HTMX documentation: "Getting Started" . Disponível em: https://htmx.org/docs/#getting-started. Acesso: 2024.