Voltar
O caminho até o Rails 8.1: da migração de Vue e jQuery para o Stimulus

DNSimple troca Vue e jQuery por Stimulus e Turbo Frames no caminho até o Rails 8.1

Aprofundamento CEVIU

Aprofundamento

A DNSimple conta que, ao começar a migração para os padrões do Rails 8.1, o app tinha cerca de 50 componentes Vue e muito jQuery. Hoje não tem nenhum dos dois. O motivo técnico: importmaps não compilam single-file components do Vue, então a biblioteca exigia um passo de build próprio, que barrava a meta de ter um Rails sem bundler de JavaScript. Já o jQuery quebrou por outro caminho. Os scripts de página se atachavam a seletores js-* no DOMContentLoaded, evento que o Turbo Drive não dispara a cada visita.

O caso concreto é o pop-up de verificação de DNS antes de ações como adicionar registros, configurar encaminhamento de e-mail ou pedir certificado. Era um componente Vue de 350 linhas, com 17 props e seis estados, que buscava JSON e montava no navegador o HTML de cinco estados de falha. Cada página que o usava rodava uma query de domínio, uma checagem de permissão e uma consulta de preço só para preencher as props. Agora o endpoint devolve HTML para um Turbo Frame: vazio em caso de sucesso, com a mensagem completa em caso de falha. O controller do Stimulus tem um único valor (a URL da verificação), guarda o link ou botão clicado e reclica nele depois. Uma flag de bypass evita que ele capture o próprio clique reenviado. O Refresh chama frame.reload(), e o Turbo cancela qualquer requisição em andamento, o que no Vue exigia um guard isLoading. A contagem de linhas ficou parecida (cerca de 430 contra cerca de 400, com um controller de 192 linhas e dois partials), mas as três queries extras saíram das páginas.

Por que isso importa

Para quem mantém um front com Vue ou jQuery dentro de um Rails, a leitura aqui é que o ganho não está em apagar linhas, e sim em reduzir o que o navegador precisa saber. Se o servidor já tem permissões e preços, renderizar HTML lá evita duplicar regra de negócio em dois lugares. A própria DNSimple sugere a ordem de perguntas: elemento HTML nativo, depois HTML renderizado no servidor, e só então o menor pedaço possível de JavaScript.

Perguntas frequentes

Por que a DNSimple não manteve o Vue?

Importmaps não compilam single-file components do Vue, então a biblioteca precisava de um passo de build próprio. Isso impedia ter um app Rails sem bundler de JavaScript, objetivo da migração para os padrões do Rails 8.1.

Por que o jQuery deixou de funcionar com o Turbo Drive?

Boa parte do jQuery da DNSimple eram scripts de página ligados a seletores js-* no DOMContentLoaded. O Turbo Drive não dispara esse evento a cada visita, então os scripts pararam de rodar quando a página passou a usar Turbo.

O que o Stimulus faz que o Turbo Frame não faz?

No caso da verificação de DNS, o controller guarda o link ou botão clicado e reclica nele quando a checagem passa. Também usa uma flag de bypass para não interceptar o próprio clique. O resto fica por conta do frame renderizado no servidor.

Todo componente Vue virou controller do Stimulus?

Não. O elemento nativo substituiu o modal em Vue, alguns widgets viraram Web Components pequenos e outros viraram Turbo Frames sem JavaScript. O Stimulus ficou para o que ainda precisava de código no navegador.

Fontes

Avalie este artigo:
Categoria
CEVIU Web Dev
Publicado
13 de novembro de 2026
Editoria
CEVIU Web Dev

Quer receber mais sobre CEVIU Web Dev?

Conteúdo curado diariamente, direto no seu e-mail.

Conteúdo curado diariamenteDiversas categoriasCancele quando quiser