- Tras casi 10 años, se publica oficialmente jQuery 4.0.0 como una actualización de versión mayor
- Se elimina el soporte para IE 10 e inferiores y navegadores antiguos, se aligera el código y se refuerza el cumplimiento de estándares modernos; la mayoría de los usuarios podrá actualizar sin cambios en su código
- Transición a una estructura basada en módulos ES con adopción de Rollup para la compilación, asegurando compatibilidad con entornos de desarrollo modernos
- Se añade soporte para Trusted Types y CSP para minimizar conflictos con políticas de seguridad
- Eliminación de APIs obsoletas y reducción del build slim para mejorar el rendimiento y la mantenibilidad
Resumen principal de jQuery 4.0.0
- jQuery 4.0.0 es una gran versión mayor lanzada tras casi 10 años, completada después de un largo ciclo de desarrollo y varias prereleases
- La mayoría de los usuarios podrá actualizar sin cambios en su código
- Se eliminaron código heredado y parámetros privados acumulados en versiones anteriores
- También se ofrecen una guía de actualización y el plugin jQuery Migrate para facilitar la transición desde versiones previas
- La distribución está disponible a través del CDN oficial y npm; otros CDN se actualizarán gradualmente
Cambios en el soporte de navegadores
- Se elimina el soporte para IE 10 e inferiores; IE 11 se retirará gradualmente en jQuery 5.0
- Edge Legacy, versiones antiguas de iOS (anteriores a las 3 versiones más recientes), versiones antiguas de Firefox (anteriores a las 2 versiones más recientes) y Android Browser dejan de ser compatibles
- Si necesitas soportar navegadores antiguos, se recomienda mantener jQuery 3.x
Compatibilidad con Trusted Types y CSP
- Se añade soporte para Trusted Types para manejar de forma segura objetos TrustedHTML
- La mayoría de las solicitudes de scripts asíncronos se cambian a un enfoque basado en la etiqueta `` para evitar errores de CSP
- Si se usa la opción
"headers", todavía se puede usar XHR, aunque se recomienda scriptAttrs
Transición a módulos ES
- El código fuente de jQuery se migró por completo de AMD a módulos ES
- Se adopta Rollup como herramienta de compilación en lugar de RequireJS
- Las pruebas se ejecutan por separado sobre la base de módulos ES
- Mediante `` se asegura la compatibilidad con navegadores modernos y herramientas de build
Eliminación de APIs obsoletas
- Se eliminaron por completo APIs que llevaban mucho tiempo en estado obsoleto
- Funciones eliminadas:
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: usar métodos nativos como
Array.isArray(), JSON.parse(), String.prototype.trim(), Date.now(), etc.
- Con la eliminación de código relacionado con IE, el tamaño se reduce en unos 3 KB gzip
Eliminación de métodos de uso interno
- Se eliminaron del prototipo de jQuery los métodos push, sort y splice que solo se usaban internamente
- En lugar de
$elems.push(elem), puede usarse [].push.call($elems, elem)
Cambio en el orden de eventos de foco
- Se unifica según la especificación W3C del orden de eventos focus/blur
- Nuevo orden: blur → focusout → focus → focusin
- Como difiere del orden anterior de jQuery, se requiere atención por compatibilidad
- Todos los navegadores, excepto IE, funcionan con el mismo orden
Mejoras en el build slim
- Se eliminan Deferreds y Callbacks, reduciendo el tamaño del archivo a unos 19.5 KB (gzip)
- Como la mayoría de los navegadores ya soporta Promise nativo, puede usarse como reemplazo
- Si necesitas compatibilidad con IE11, se recomienda el build principal o un polyfill de Promise
- El build slim excluye módulos de Ajax y animaciones, por lo que es unos 8 KB más pequeño
Descarga y distribución
- Disponible para descarga desde el CDN oficial y npm
- Versión estable:
- Versión slim:
- Comando de instalación en npm:
npm install jquery@4.0.0
Colaboradores y 20.º aniversario
- Numerosos contribuidores de código abierto participaron con parches, reportes de bugs y pruebas
- Con motivo de los 20 años de jQuery, hubo una reunión del equipo en Dallas, y el fundador John Resig también participó por Zoom
Resumen de los principales cambios de código (Changelog)
- Ajax: mejora en el manejo de datos binarios, prevención de errores de CSP y mejor tratamiento de errores de JSONP
- CSS: corrección del cálculo de tamaño del elemento ``, mejora en el manejo de espacios en variables CSS y eliminación del hook de
opacity
- Core: transición de
AMD → módulos ES, uso de DOMParser y eliminación de código para navegadores antiguos
- Event: manejo nativo de eventos focus/blur y eliminación del shim de
event.which
- Selector: integración de Sizzle, mejoras en
:has y :even/:odd, y añadido de encadenamiento en uniqueSort
- Docs: actualización de enlaces HTTPS y reorganización de los documentos README y CONTRIBUTING
- Release: automatización del proceso de build y distribución, con migración basada en
release-it
Resumen
- jQuery 4.0.0 es una versión con una reestructuración profunda alineada con los estándares web modernos y las políticas de seguridad
- Eliminación de código heredado, modularización ES, refuerzo de seguridad y reducción de peso para fortalecer la base de mantenimiento a largo plazo
- Se considera un lanzamiento simbólico que conmemora los 20 años del ecosistema jQuery
3 comentarios
Es un emotivo 20.º aniversario. Aunque ahora casi ya no hay ocasiones para usarlo, espero que siga siendo querido como una herramienta útil en el trabajo real.
Qué increíblemente duradero es... jaja
Comentarios de Hacker News
Como lectura relacionada, hay un artículo que explica muy bien cómo usar jQuery de forma reactiva cuando no puedes usar frameworks modernos en una base de código legacy
Reactive jQuery for Spaghetti-fied Legacy Codebases
Si tienes que usar jQuery por razones de legacy, Backbone puede ser un buen paso intermedio antes de migrar a un framework moderno
Sitio oficial de BackboneJS, lista de tags en GitHub
La verdad, a veces código en React sobreingenierizado era peor que código jQuery bien organizado
React sí elevó el estándar de calidad, pero a veces usar bien una herramienta conocida es más eficiente
Encaja especialmente bien en casos como Userscript, donde el alcance del problema es pequeño y el build step da flojera
De hecho, incluso sin jQuery se puede implementar de sobra con
querySelector,addEventListenereinnerHTMLTuve que meter a la fuerza un frontend de búsqueda personalizado dentro de Joomla CMS, y funcionó bastante bien
Así es exactamente como lo hacemos en Reactive Mastro
jQuery sigue siendo una de mis librerías favoritas
Es una herramienta que hizo mi carrera, así que siempre le voy a tener cariño
La combinación de jQuery + jQuery UI + plugins + AI parece tener muchísimo potencial
Cada vez que sale el tema de HTMX pienso: “¿esto no se resuelve con tres líneas de jQuery?”
Al final, jQuery siempre resolvía el problema, y eso es lo importante
.load()de jQueryVer documentación de jQuery.load()
Lo descubrí mientras hacía trabajo de performance, y de verdad me aumentó mucho el respeto por jQuery
$()sigue siendo insuperableLa diferencia de rendimiento quizá se podría compensar con precálculo
Es simple y aun así puede dar una sensación parecida a una SPA
Good ol’ jQuery, de verdad fue algo a lo que estar agradecido
Me da gusto ver que jQuery sigue vivo y recibiendo actualizaciones
Pero eso también significa que React podría seguir existiendo hasta 2060, y eso me pone un poco triste
Si pienso en el viejo infierno de callbacks, lo de ahora parece un sueño
En la época de los 2000 y 2010, cuando los frameworks SPA todavía no eran comunes, yo también aprendí desarrollo web con jQuery
Siento que muchas de las cosas que hice entonces todavía deben seguir funcionando
Le mando un agradecimiento al equipo de jQuery
Felicidades a todos los que participaron en el lanzamiento de jQuery 4.0
Si quieres un enfoque más estructurado, existe un sistema de plantillas reactivas llamado JsViews
Es viejo y estable, aunque no ha recibido tanta atención como los frameworks modernos
Personalmente me gustan estilos modernos tipo jQuery como cheerio y alpine.js
cheerio.js.org, alpinejs.dev
Aunque el diseño del sitio es tan anticuado que quizá por eso no se adopta mucho
Aun así carga rápido, y su ligereza impresiona
jsrender.min.jspesa apenas 12.82kBAunque cuesta creerlo, jQuery 4.0 todavía soporta IE11
Eso por fin se eliminará en jQuery 5.0
Ver este PR relacionado y este issue
Pensar que 3.0 salió hace 10 años sí sorprende bastante
Se agradece que sigan dando soporte a esos usuarios y productos
Todavía hay muchos salones de informática escolares que usan sistemas viejos
El esfuerzo invertido en las herramientas de actualización de jQuery es realmente admirable
Todavía amo la sintaxis encadenable de jQuery
Hace 15 años escribí un tutorial de jQuery en francés y tuvo muchísimas vistas
Ojalá haya contribuido aunque sea un poco a la difusión de jQuery