- Após cerca de 10 anos, foi lançada oficialmente a atualização de versão major jQuery 4.0.0
- Fim do suporte ao IE 10 e anteriores e a navegadores antigos, com código mais leve e maior conformidade com padrões modernos; a maioria dos usuários pode fazer upgrade sem alterar o código
- Transição para uma estrutura baseada em módulos ES com adoção do build via Rollup, garantindo compatibilidade com ambientes de desenvolvimento modernos
- Adição de suporte a Trusted Types e CSP para minimizar conflitos com políticas de segurança
- Remoção de APIs deprecated e redução do build slim para melhorar desempenho e manutenção
Visão geral principal do jQuery 4.0.0
- O jQuery 4.0.0 é um grande release major após cerca de 10 anos, concluído depois de um longo ciclo de desenvolvimento e várias pré-releases
- A maioria dos usuários pode fazer upgrade sem alterar o código
- Remoção de código legado e parâmetros privados acumulados em versões anteriores
- O guia de upgrade e o plugin jQuery Migrate são fornecidos para ajudar na transição a partir de versões anteriores
- A distribuição está disponível via CDN oficial e npm, e outros CDNs serão atualizados gradualmente
Mudanças no suporte a navegadores
- Fim do suporte ao IE 10 e anteriores; o IE 11 será removido gradualmente no jQuery 5.0
- Fim do suporte ao Edge Legacy, versões antigas do iOS (anteriores às 3 versões mais recentes), versões antigas do Firefox (anteriores às 2 versões mais recentes) e Android Browser
- Se for necessário oferecer suporte a navegadores antigos, é recomendado permanecer no jQuery 3.x
Compatibilidade com Trusted Types e CSP
- Foi adicionado suporte a Trusted Types para tratar com segurança objetos TrustedHTML
- A maioria das requisições assíncronas de script foi convertida para uma abordagem baseada em tags ``, evitando erros de CSP
- Ao usar a opção
"headers", ainda é possível usar XHR, mas é recomendado usar scriptAttrs
Transição para módulos ES
- O código-fonte do jQuery foi totalmente migrado de AMD para módulos ES
- O Rollup foi adotado como ferramenta de build no lugar do RequireJS
- Testes separados também foram executados com base em módulos ES
- Compatibilidade com navegadores modernos e ferramentas de build garantida por meio de ``
Remoção de APIs deprecated
- APIs que estavam marcadas como não recomendadas há muito tempo foram removidas por completo
- Funções removidas:
jQuery.isArray, jQuery.parseJSON, jQuery.trim, jQuery.type, jQuery.now, jQuery.isNumeric, jQuery.isFunction, jQuery.isWindow, jQuery.camelCase, jQuery.nodeName, jQuery.cssNumber, jQuery.cssProps, jQuery.fx.interval
- Alternativas: uso de métodos nativos como
Array.isArray(), JSON.parse(), String.prototype.trim(), Date.now() etc.
- Com a remoção do código relacionado ao IE, o tamanho foi reduzido em cerca de 3 KB em gzip
Remoção de métodos internos
- Os métodos push, sort e splice, usados apenas internamente no protótipo do jQuery, foram removidos
- Em vez de
$elems.push(elem), é possível substituir por [].push.call($elems, elem)
Mudança na ordem dos eventos de foco
- Padronização para a ordem de eventos focus/blur conforme a especificação W3C
- Nova ordem: blur → focusout → focus → focusin
- Como difere da ordem anterior do jQuery, é necessário atenção à compatibilidade
- Todos os navegadores, exceto o IE, seguem a mesma ordem
Melhorias no build slim
- Remoção de Deferreds e Callbacks, reduzindo o tamanho do arquivo para cerca de 19.5 KB (gzip)
- Como a maioria dos navegadores oferece suporte nativo a Promise, isso pode ser usado como substituição
- Se houver necessidade de suporte ao IE11, recomenda-se o build principal ou um polyfill de Promise
- O build slim exclui módulos relacionados a Ajax e animação, ficando cerca de 8 KB menor
Download e distribuição
- Disponível para download no CDN oficial e no npm
- Versão estável:
- Versão slim:
- Comando de instalação via npm:
npm install jquery@4.0.0
Contribuidores e comemoração de 20 anos
- Diversos contribuidores de open source participaram com patches, relatórios de bugs e testes
- Em comemoração aos 20 anos do jQuery, houve um reencontro da equipe em Dallas, com participação do fundador John Resig via Zoom
Resumo das principais mudanças de código (Changelog)
- Ajax: melhorias no tratamento de dados binários, prevenção de erros de CSP, reforço no tratamento de erros de JSONP
- CSS: correção no cálculo de tamanho de elementos ``, melhoria no tratamento de espaços em variáveis CSS, remoção do hook
opacity
- Core: transição de
AMD → módulos ES, uso de DOMParser, remoção de código para navegadores antigos
- Event: tratamento nativo de eventos focus/blur, remoção do shim
event.which
- Selector: integração do Sizzle, melhorias em
:has e :even/:odd, adição de encadeamento em uniqueSort
- Docs: atualização de links HTTPS, organização dos documentos README e CONTRIBUTING
- Release: automação do processo de build e distribuição, migração para uma base em
release-it
Resumo
- O jQuery 4.0.0 é uma versão de reformulação estrutural alinhada aos padrões web modernos e às políticas de segurança
- Remoção de código legado, modularização em ES, reforço de segurança e redução de tamanho fortalecem a base para manutenção de longo prazo
- É avaliado como um lançamento simbólico que celebra os 20 anos do ecossistema jQuery
3 comentários
É um 20º aniversário emocionante. Agora quase não há mais ocasiões para usá-lo, mas espero que continue sendo amado como uma ferramenta ainda útil no dia a dia do campo.
É incrivelmente durável mesmo.. haha
Comentários do Hacker News
Há um texto relacionado que organiza bem como usar jQuery de forma reativa em bases de código legadas quando não dá para usar frameworks modernos
Reactive jQuery for Spaghetti-fied Legacy Codebases
Se você precisa usar jQuery por motivos de legado, o Backbone pode ser uma boa etapa intermediária antes de migrar para um framework moderno
Site oficial do BackboneJS, lista de tags no GitHub
Na verdade, às vezes já vi código em React excessivamente projetado ser pior do que código em jQuery bem organizado
O React realmente elevou o padrão de qualidade, mas às vezes usar bem uma ferramenta familiar é mais eficiente
Funciona especialmente bem em casos como Userscript, quando o escopo do problema é pequeno e o build step é um incômodo
Na prática, isso também pode ser implementado sem jQuery, só com
querySelector,addEventListenereinnerHTMLEu precisava enfiar à força um frontend de busca customizado dentro de um Joomla CMS, e funcionou muito bem
É exatamente assim que fazemos em Reactive Mastro
jQuery continua sendo uma das minhas bibliotecas favoritas
É uma ferramenta pela qual sempre terei carinho, porque ajudou a construir minha carreira
Uma combinação de jQuery + jQuery UI + plugins + IA parece ter um potencial enorme
Sempre que falam de HTMX, eu penso: “isso não daria para fazer em três linhas com jQuery?”
De qualquer forma, o jQuery sempre resolveu os problemas, e é isso que importa
.load()do jQueryVeja a documentação do jQuery.load()
Descobri isso enquanto fazia trabalho de performance, e isso me deu ainda mais respeito pelo jQuery
$()ainda era incomparávelTalvez a diferença de desempenho pudesse ser compensada com pré-cálculo
É simples e ainda consegue passar uma sensação parecida com a de uma SPA
Bom e velho jQuery, sou realmente grato a ele
Fico feliz em ver que o jQuery ainda é mantido e atualizado
Mas isso também significa que talvez o React ainda esteja vivo em 2060, o que é um pouco triste
Pensando no antigo inferno dos callbacks, o cenário atual parece um sonho
Lá pelos anos 2000 e 2010, quando frameworks SPA ainda não eram comuns, eu também aprendi desenvolvimento web com jQuery
Acho que uma boa parte do que fiz naquela época ainda deve estar rodando
Deixo aqui meu agradecimento à equipe do jQuery
Parabéns a todos que participaram do lançamento do jQuery 4.0
Se alguém quiser uma abordagem mais estruturada, existe o JsViews, um sistema de templates reativo
É antigo e estável, mas não recebeu tanta atenção quanto os frameworks mais recentes
Pessoalmente, gosto de estilos modernos de jQuery como cheerio e alpine.js
cheerio.js.org, alpinejs.dev
Só que o design do site é tão ultrapassado que parece reduzir sua adoção
Ainda assim, carrega rápido, e a leveza impressiona
jsrender.min.jstem só 12.82kBPor incrível que pareça, o jQuery 4.0 ainda suporta IE11
Isso finalmente deve ser removido no jQuery 5.0
Veja este PR relacionado e esta issue
Pensando que o 3.0 saiu há 10 anos, isso surpreende bastante
Sou grato por ainda darem suporte a esses usuários e produtos
Ainda há muitos laboratórios de informática em escolas que usam sistemas antigos
O esforço colocado nas ferramentas de upgrade do jQuery é realmente admirável
Ainda adoro a sintaxe de encadeamento do jQuery
Há 15 anos escrevi um tutorial de jQuery em francês, e ele recebeu muitas visualizações
Espero ter contribuído, nem que seja um pouco, para a popularização do jQuery