Veremos hasta qué punto jQuery puede aportar mayor sencillez y mantenibilidad al código que Javascript Vanilla. Explicamos los contextos donde jQuery podría tener o no tener sentido en la actualidad.
Mucho ha llovido desde que se presentó la librería jQuery. En todos estos años tanto los navegadores como el mundo del desarrollo en Internet ha sufrido una fuerte transformación, pero la librería sigue ahí, aportando valor para una gran comunidad de desarrolladores frontend.
Es verdad que en todo este tiempo muchas otras propuestas para el desarrollo del área del cliente en la web han innovado y conseguido mejorar la experiencia de desarrollo, por ejemplo gracias a la programación declarativa. Por ese motivo hoy la librería jQuery no se encuentra entre las más alternativas "mejor vistas". Pero a pesar de todo, sigue teniendo una increíble cuota de uso y ofrece muchas ventajas sobre el desarrollo con Javascript "nativo".
jQuery es la librería más usada en Javascript para el navegador. Actualmente tiene casi 7 veces más cuota de uso en sitios web que la segunda colocada.
Con intención de ver hasta qué punto nos puede ayudar todavía hoy jQuery vamos a realizar una comparativa con el uso de VanillaJS (Javascript sin librerías). Para ello vamos a mostrar varios ejemplos sencillos, con cosas relevantes podríamos querer hacer en páginas web, presentando variantes de códigos donde se ha usado solo Javascript y Javascript con jQuery.
Además, al final del todo ofreceremos unas conclusiones y los casos en los que pensamos que todavía tiene sentido usar jQuery.
Este artículo no pretende ofrecer explicaciones detalladas sobre cuáles son las funcionalidades que se han desempeñado. Simplemente se pretende poner en comparación diversos códigos fuente. Si deseas aprender jQuery tienes a todo disposición el manual de jQuery.
Eventos
Con jQuery tenemos una manera muy resumida para conseguir asociar manejadores de eventos a los elementos de la página.
En la siguiente página puedes ver cómo se define un manejador de evento en JavaScript nativo y con jQuery.
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Definir un evento</title>
</head>
<body>
<button id="btn1">Clic 1</button>
<button id="btn2">Clic 2</button>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
<script>
document.getElementById('btn1').addEventListener('click', function() {
console.log('VanillaJS: Has hecho clic!');
})
$("#btn2").on('click', function() {
console.log('jQuery: Has hecho clic!');
})
</script>
</body>
</html>
Aunque con jQuery se escriba menos, en realidad los dos códigos son bastante parecidos. Existen otros eventos donde puede ser más notable la diferencia. Por ejemplo, en la siguiente página mostramos cómo se define el evento que permite especificar un código que debe ejecutarse cuando el navegador tenga listo el árbol DOM.
<html lang="es">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>document ready</title>
</head>
<body>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
<script>
function ready(fn) {
if (document.readyState !== 'loading') {
fn();
} else {
document.addEventListener('DOMContentLoaded', fn);
}
}
ready(function() {
console.log('El documento está listo (JS)');
})
$(document).ready(function () {
console.log('El documento está listo (jQuery)');
});
</script>
</body>
</html>
Seleccionar elementos de la página
Una de las áreas interesantes donde jQuery nos ofrece bastantes utilidades es a la hora de seleccionar elementos de la página para poder realizar acciones con ellos de una manera unificada.
Por ejemplo, en la página siguiente se seleccionan todos los párrafos que hay en el documento y se realiza un cambio de una de sus clases de CSS de manera individual en cada párrafo. Mientras que jQuery nos permite hacerlo con una única línea de código en JavaScript tendremos que hacer un recorrido a todos los elementos de tipol párrafo.
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Recorrer párrafos</title>
<style>
p {
border-radius: 1rem;
padding: 1rem;
color: #fff;
background-color: #ddd;
}
.rojo {
background-color: red;
}
.azul {
background-color: blue;
}
</style>
</head>
<body>
<p>item 1</p>
<p>item 2</p>
<p>item 3</p>
<button id="rojo">Rojo</button>
<button id="azul">Azul</button>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
<script>
document.getElementById('rojo').addEventListener('click', function() {
document.querySelectorAll('p').forEach( function(parrafo) {
parrafo.classList.add('rojo')
parrafo.classList.remove('azul')
})
})
$('#azul').on('click', function() {
$('p').addClass('azul');
$('p').removeClass('rojo');
})
</script>
</body>
</html>
Ajax
Una utilidad donde jQuery se utiliza con mucha frecuencia es la realización de solicitudes asíncronas al servidor, lo que se conoce como Ajax.
Si bien es cierto que con la interfaz fetch que existe en la actualidad en los navegadores se ha reducido mucho el código para hacer solicitudes, con jQuery todavía podemos obtener un poquito más de facilidad.
En el siguiente ejemplo se muestra como realizar una solicitud a un API para traernos datos que nos devuelve en formato JSON.
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Acceso a API</title>
</head>
<body>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
<script>
// No funciona en IE 11
fetch('https://jsonplaceholder.typicode.com/todos/1')
.then(response => response.json())
.then(json => console.log(json))
$.getJSON('https://jsonplaceholder.typicode.com/todos/1', function (data) {
console.log(data);
});
</script>
</body>
</html>
Combinando varias funcionalidades del cliente
Cuando vemos ejemplos un poco más complejos en los que no se realiza una única operación, sino varias conjuntas para resolver un problema mayor, encontramos todavía más relevante el uso de jQuery.
En este ejemplo un poco más elaborado se combinan varias características de JavaScript. Lo que hacemos en el código siguiente es acceder a los datos que nos vienen de un API y luego mostrar esos datos elementos creados al vuelo en la página.
Dado que son ejemplos bastante más complejos los preferimos ver en páginas independientes.
Esta sería la alternativa Javascript para realizar esa tarea:
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Recuperar datos y mostrarlos</title>
<style>
section {
padding: 1rem;
background-color: beige;
margin-bottom: 1rem;
}
</style>
</head>
<body>
<button id="load">load</button>
<script>
function ready(fn) {
if (document.readyState !== 'loading') {
fn();
} else {
document.addEventListener('DOMContentLoaded', fn);
}
}
ready(function() {
document.getElementById('load').addEventListener('click', function() {
fetch('https://jsonplaceholder.typicode.com/todos')
.then(response => response.json())
.then(data => showElements(data))
});
});
function generateElements(html) {
const template = document.createElement('template');
template.innerHTML = html.trim();
return template.content.children;
}
function showElements(data) {
data.forEach(element => {
console.log(element);
let html = generateElements(`<section><h1>${element.title}</h1><p>Usuario: ${element.userId}</p></section>`);
console.log(html);
Array.from(html).forEach(element => {
document.body.appendChild(element);
});
});
}
</script>
</body>
</html>
Y ahora podemos ver la alternativa para realizar el mismo ejercicio exactamente pero utilizando la librería jQuery.
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Recuperar datos y mostrarlos</title>
<style>
section {
padding: 1rem;
background-color: beige;
margin-bottom: 1rem;
}
</style>
</head>
<body>
<button id="load">load</button>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
<script>
$(document).ready( function() {
$('#load').on('click', () => $.getJSON('https://jsonplaceholder.typicode.com/todos/', showTodos));
});
function showTodos(data) {
data.forEach( element => {
let html = $(`<section><h1>${element.title}</h1><p>Usuario: ${element.userId}</p></section>`);
$(document.body).append(html);
})
}
</script>
</body>
</html>
Como puedes apreciar salta a la vista la diferencia en el código de ambas soluciones y la complejidad que tiene si lo tienes que realizar únicamente con JavaScript sin valerte de alguna librería.
Obviamente, cuando tienes problemas un poco más grandes puedes realizar funciones o clases con Javascript nativo. Gracias a ellas puedes llegar a tener un código similar en términos de complejidad al que se consigue con jQuery. Es decir, podrías conseguir que el código hecho con JavaScript nativo tuviese mejor cara que lo que se ha visto en el anterior ejemplo, pero siempre te va a dar más trabajo. También podríamos usar micro librerías que nos aporten funcionalidades sin tener que recurrir a toda una gran librería como jQuery que sirve para hacer muchas cosas y diversas.
Quizás haya faltado por explicar con detalle qué hace cada código. Puedes aprender mucho más en adelante en el Manual de jQuery o en el Manual de Javascript. La idea era ver ver las ventajas que nos puede ofrecer jQuery todavía a día de hoy.
Otras utilidades de jQuery
Por supuesto en este artículo nos hemos dedicado únicamente a mostrar algunos pedazos de código de una dificultad muy elemental. En realidad las necesidades del día a día pueden ir mucho más allá y jQuery te puede aportar muchos beneficios.
Uno de los puntos destacables son los plugins, con los que podemos conseguir funcionalidades reutilizables, sin invertir nada de tiempo en desarrollarlas, gracias a los aportes de la comunidad. Existen librerías como jQuery UI que nos ofrecen diversos plugins de jQuery para hacer muchos tipos de interfaces de usuario como datepickers, acordeones, cajas de diálogo, etc. Además la comunidad ha liberado miles de plugins basados en jQuery que puedes utilizar para tus desarrollos.
jQuery está en más lugares de los que te imaginas
Finalmente queremos comentar que jQuery está presente en una inmensa cantidad de proyectos en la web. Por ejemplo forma parte de CMS como Magento, así como está presente en la mayor parte de los temas que puedes llegar a instalar mediante WordPress.
Es por ello que si tienes unas nociones de jQuery podrás utilizar la librería usando las mismas herramientas que ya tienes disponibles de casa en muchos tipos de proyectos y sin recargar más tu sitio ni afectar a la optimización.
Cuándo tiene sentido usar jQuery y cuándo no
Ahora vamos a ver algunos puntos que nos pueden ayudar a entender cuándo es una buena idea usar jQuery y cuando no.
Ventajas y desventajas de jQuery
Como habrás podido deducir de la lectura de este artículo hasta el momento, jQuery nos puede ofrecer algunas ventajas relevantes:
- Simplicidad: Escribir programas con jQuery es más sencillo que escribirlos con JavaScript sin usar librerías.
- Mantenibilidad: Programas más sencillos también indica que serán más mantenibles, y al final la facilidad de mantenimiento es la clave para entender que un software es de calidad.
- Plugins: JQuery tiene un enorme ecosistema de plugins que nos pueden quitar mucho trabajo, a veces bastante complejo de realizar.
- Facilidad de integración: jQuery es muy fácil de integrar en un sitio web, mucho más que las librerías modernas, que habitualmente requieren procesos de compilación o transpiración del código y flujos de despliegue más laboriosos.
Pero es totalmente cierto que tenemos algunas desventajas que también es importante mencionar.
- Peso: Por supuesto, el hecho de usar la librería jQuery aumenta el peso de nuestras páginas. Actualmente ocupa 85 Kb. Puede parecer mucho, aunque debemos pensar que a la hora de transferir los archivos generalmente se envían comprimidos desde el servidor, por lo que en realidad el impacto es pequeño.
- Optimización: A más peso menos optimización. Una web que use jQuery puede tener un poquito menos de optimización por tanto que una que utilice solamente JavaScript.
- Librería imperativa: En comparación con otras librerías más modernas jQuery tiene la desventaja de ser imperativa, lo que nos obliga a escribir más código que otras alternativas declarativas y reactivas como Angular, Vue, React, etc.
Contextos donde jQuery podría ser muy recomendable
Algunos contextos dentro del desarrollo web donde podría ser totalmente lógico usar jQuery.
- Si es la única librería que sabes, seguramente seguirá siendo de utilidad para ti, por lo que te seguirá aportando valor.
- Proyectos sencillos, por productividad. jQuery nos puede quitar mucho trabajo y si el proyecto es relativamente sencillo no hay necesidad de más.
- Proyectos donde se esté usando actualmente: jQuery se usa en una increíble cantidad de sitios web. Si tu web ya utiliza jQuery, porque su cms la carga de manera predeterminada, o bien tienes una plantilla o plugin que ya la usa, tiene sentido que te apoyes en la librería para hacer tu código.
- Proyectos Legacy: finalmente, los proyectos antiguos puede que estén usando jQuery o bien que en ellos sea muy complicado adoptar otras librerías, por lo que jQuery es mucho más fácil de integrar.
### Dónde no usaría jQuery
Algunos contextos donde pensamos que la librería jQuery se puede quedar un poco corta y combine pensar en otras alternativas.
- Proyectos nuevos que puedan tener cierta complejidad: Si estás haciendo un nuevo proyecto y ese proyecto piensas que puede tener cierta complejidad quizás sea mejor empezar desde cero con otras librerías más modernas.
- Sitios web del modelo SPA o PWA, donde jQuery no aporta mucho valor
- Sistemas de diseño: donde actualmente basarse en Web Components tendría mucho más sentido.
Seguir comparando código jQuery con Javascript Vanilla
Ya para concluir este artículo queremos dejarte una referencia a un sitio que ofrece muchas más comparativas de código entre JavaScript Vanilla y jQuery. Se trata de "You might not need jQuery". Te recomendamos que le eches un vistazo porque es una fuente muy interesante para poder entender las ventajas y desventajas de la librería jQuery con respecto a hacer las cosas con JavaScript nativo.
Miguel Angel Alvarez
Fundador de DesarrolloWeb.com y la plataforma de formación online EscuelaIT. Com...