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
- blog.dnsimple.comfonte original
- Categoria
- CEVIU Web Dev
- Publicado
- 13 de novembro de 2026
- Editoria
- CEVIU Web Dev

