Uso de la caché y los objetos Deferred
Utilice la caché de selectores para evitar búsquedas redundantes en el DOM y comprenda los objetos Deferred de jQuery para gestionar operaciones asíncronas con mayor eficacia y mejorar la legibilidad y el rendimiento del código.
Uso de la caché y los objetos Deferred es una lección gratuita de jQuery Academy en CoddyKit. Esta es la lección 3 de 3. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de jQuery Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de jQuery Academy incluye 3 lecciones en total.
Mejore el rendimiento con la caché y Deferreds
¡Le damos la bienvenida! En esta lección exploraremos dos técnicas potentes para hacer que sus aplicaciones jQuery sean más rápidas y eficientes: la caché de selectores y los objetos Deferred.
Estos métodos ayudan a reducir el trabajo redundante y a gestionar fácilmente operaciones asíncronas complejas.
Por qué es importante almacenar en caché los selectores
Cada vez que utiliza un selector de jQuery como $("#myElement") o $(".item"), jQuery debe recorrer el Document Object Model (DOM) para encontrar los elementos coincidentes.
- Este recorrido puede ser lento, especialmente con selectores complejos o árboles DOM grandes.
- Buscar repetidamente los mismos elementos desperdicia capacidad de procesamiento.
La caché ayuda a evitarlo.
Almacene sus selecciones
En lugar de buscar varias veces en el DOM, almacene el resultado de una selección de jQuery en una variable. Esta variable conservará una referencia al objeto jQuery.
Ejecute este ejemplo para ver cómo almacenamos una selección en la caché:
// Imagine this is in your HTML
// <div id="myDiv">Hello</div>
// Simulate jQuery selecting an element
// In a real browser, this would return a jQuery object
const $myElement = {
id: "myDiv",
text: "Hello",
// Simulate jQuery methods
css: function(prop, value) {
console.log(`Setting ${prop} to ${value} on #${this.id}`);
},
addClass: function(cls) {
console.log(`Adding class "${cls}" to #${this.id}`);
}
};
console.log("--- Without Caching (simulated) ---");
// This would ideally re-query the DOM
$myElement.css("color", "blue"); // Simulates $("#myDiv").css(...)
$myElement.addClass("highlight"); // Simulates $("#myDiv").addClass(...)
console.log("\n--- With Caching ---");
// We already have $myElement, so no re-query
$myElement.css("font-weight", "bold");
$myElement.addClass("active");Encadenamiento para una mayor eficiencia
El encadenamiento de métodos de jQuery ya es una forma de optimización, porque opera sobre el mismo conjunto de elementos seleccionados.
Sin embargo, la caché es fundamental cuando necesita realizar operaciones sobre los mismos elementos en distintos momentos del código o desde distintos controladores de eventos.
// Chaining is good for sequential ops
$("#myElement")
.addClass("active")
.css("color", "blue")
.fadeIn();
// Caching is better for repeated, non-sequential ops
const $cachedElement = $("#myElement");
// Later in code...
$cachedElement.trigger("click");
// Even later...
$cachedElement.removeClass("active");Reutilización de selecciones
Considere una situación en la que interactúa con frecuencia con un grupo de elementos. Almacenar en caché la selección inicial evita repetir consultas al DOM.
Esto resulta especialmente útil dentro de bucles, controladores de eventos o funciones que operan sobre el mismo conjunto de elementos.
// Imagine HTML: <li class="item">1</li> <li class="item">2</li>
// <li class="item">3</li> <button id="toggleBtn">Toggle</button>
// Simulate jQuery context
const $items = [{
text: "Item 1"
}, {
text: "Item 2"
}];
const $toggleButton = {
text: "Toggle Button"
};
console.log("Cached items count:", $items.length);
console.log("Cached button text:", $toggleButton.text);
// Later, you might need them again, without re-querying
// e.g., in an event handler
function handleToggle() {
// Use $items and $toggleButton directly
console.log("Toggle button clicked! Working with cached items.");
}
// Call the function
handleToggle();Gestión de operaciones asíncronas
Un objeto Deferred de jQuery permite registrar varias funciones de retorno de llamada en colas, invocar dichas colas y transmitir el estado de éxito o de error de cualquier operación síncrona o asíncrona.
- Puede considerarlo una «promesa» de un resultado futuro.
- Ayuda a organizar el código que gestiona operaciones como solicitudes AJAX, animaciones o temporizadores.
Creación de un Deferred
Puede crear un objeto Deferred mediante $.Deferred(). Este objeto dispone de métodos para controlar su estado: resolve() para indicar éxito y reject() para indicar error.
Veamos cómo configurar un deferred básico que se resuelve después de un retraso.
function doSomethingAsync() {
const dfd = $.Deferred(); // Create a new Deferred
setTimeout(function() {
const success = Math.random() > 0.5; // Simulate success/failure
if (success) {
dfd.resolve("Operation successful!"); // Resolve on success
} else {
dfd.reject("Operation failed!"); // Reject on failure
}
}, 1000); // Simulate 1-second delay
return dfd.promise(); // Return the Promise part
}
// This code will run when the scene loads
// We'll attach handlers in the next scene
console.log("Deferred created. Waiting for resolution...");Uso de .done() y .fail()
Una vez que tenga un objeto Deferred (o su promesa), puede asociar funciones de retorno de llamada mediante .done() para gestionar los casos de éxito y .fail() para gestionar los errores.
La función de retorno de llamada .always() se ejecuta independientemente de que la operación tenga éxito o falle.
function doSomethingAsync() {
const dfd = $.Deferred();
setTimeout(function() {
const success = true; // For this example, let's ensure success
if (success) {
dfd.resolve("Data loaded!");
} else {
dfd.reject("Network error!");
}
}, 500);
return dfd.promise();
}
const myPromise = doSomethingAsync();
myPromise.done(function(message) {
console.log("SUCCESS:", message);
});
myPromise.fail(function(errorMessage) {
console.log("FAILED:", errorMessage);
});
myPromise.always(function() {
console.log("Operation complete (done or failed).");
});
console.log("Initiating async operation...");Transformación de resultados con .then()
Mientras que .done() y .fail() se utilizan para la gestión final, .then() es más versátil. Puede transformar el valor resuelto o incluso devolver una nueva promesa, lo que permite procesar los pasos de forma secuencial.
Puede utilizar .then() para procesar un resultado antes de pasarlo a la siguiente operación.
function fetchData() {
const dfd = $.Deferred();
setTimeout(() => {
console.log("Data fetched.");
dfd.resolve({
id: 1,
name: "Widget"
});
}, 500);
return dfd.promise();
}
fetchData()
.then(function(data) {
console.log("Processing fetched data:", data);
return data.name.toUpperCase(); // Transform the data
})
.then(function(processedName) {
console.log("Transformed name:", processedName);
// This second .then() receives the result of the first .then()
})
.fail(function(error) {
console.error("Error:", error);
});
console.log("Starting data fetch and transformation...");Cuestionario sobre caché y Deferreds
¿Listo para un desafío rápido? Compruebe cuánto entiende sobre la caché de selectores y los objetos Deferred.
Resumen: un jQuery más rápido e inteligente
¡Buen trabajo! Ha aprendido a mejorar considerablemente el rendimiento y la organización del código de su aplicación jQuery:
- Caché de selectores: almacene las selecciones de jQuery en variables para evitar búsquedas repetidas y costosas en el DOM.
- Objetos Deferred: utilice
$.Deferred(),.resolve(),.reject(),.done(),.fail()y.then()para gestionar operaciones asíncronas complejas de forma clara y eficiente.
Aplique estas técnicas para crear aplicaciones web más sólidas y con mejor rendimiento.
Preguntas frecuentes
¿La lección «Uso de la caché y los objetos Deferred» es gratis?
Sí — el texto completo de «Uso de la caché y los objetos Deferred» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de jQuery Academy, actualiza a CoddyKit PRO. El curso de jQuery Academy incluye 3 lecciones en total.
¿Qué aprenderé en «Uso de la caché y los objetos Deferred»?
Utilice la caché de selectores para evitar búsquedas redundantes en el DOM y comprenda los objetos Deferred de jQuery para gestionar operaciones asíncronas con mayor eficacia y mejorar la legibilidad… Practicas jQuery Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar jQuery Academy?
No se requiere experiencia previa. jQuery Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 3 de 3.
¿Cuánto tiempo toma la lección «Uso de la caché y los objetos Deferred»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de jQuery Academy?
Sí. Cada lección de jQuery Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Optimización de operaciones de manipulación del DOM
- Gestión y limitación eficiente de eventos
- Uso de la caché y los objetos Deferred