Utnytte bufring og Deferred-objekter
Bruk bufring av velgere for å unngå overflødige DOM-oppslag, og forstå jQuery Deferred-objekter for mer effektiv håndtering av asynkrone operasjoner samt bedre lesbarhet og ytelse i koden.
Utnytte bufring og Deferred-objekter er en gratis leksjon i jQuery Academy på CoddyKit. Dette er leksjon 3 av 3. Du kan lese valgfritt 3 leksjoner fra denne læringsstien gratis i sin helhet – deretter låser CoddyKit PRO opp alle leksjoner, samt praktisk øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i jQuery Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i jQuery Academy inneholder totalt 3 leksjoner.
Øk ytelsen med caching og Deferred-objekter
Velkommen! I denne leksjonen skal vi utforske to kraftige teknikker som gjør jQuery-applikasjonene Deres raskere og mer effektive: caching av selektorer og Deferred-objekter.
Disse metodene hjelper Dem med å redusere overflødig arbeid og håndtere komplekse asynkrone operasjoner på en enkel måte.
Hvorfor caching av selektorer er viktig
Hver gang De bruker en jQuery-selektor som $("#myElement") eller $(".item"), må jQuery gå gjennom Document Object Model (DOM) for å finne elementer som samsvarer.
- Denne gjennomgangen kan være treg, særlig for komplekse selektorer eller store DOM-trær.
- Gjentatte oppslag etter de samme elementene sløser med prosesseringskraft.
Caching hjelper oss med å unngå dette!
Lagre utvalgene Deres
I stedet for å søke gjennom DOM flere ganger kan De lagre resultatet av et jQuery-utvalg i en variabel. Variabelen inneholder da en referanse til jQuery-objektet.
Prøv å kjøre dette eksempelet for å se hvordan vi cacher et utvalg:
// 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");Kjeding for økt effektivitet
jQuerys metodekjeding er allerede en form for effektivisering, siden den opererer på det samme utvalget av elementer.
Caching er likevel avgjørende når De trenger å utføre operasjoner på de samme elementene på ulike steder i koden eller i ulike hendelsesbehandlere.
// 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");Gjenbruke utvalg
Tenk på et scenario der De ofte samhandler med en gruppe elementer. Ved å cache det opprinnelige utvalget unngår De gjentatte DOM-spørringer.
Dette er spesielt nyttig i løkker, hendelsesbehandlere eller funksjoner som opererer på det samme utvalget av elementer.
// 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();Håndtering av asynkrone operasjoner
Et Deferred-objekt i jQuery gjør det mulig å registrere flere callback-funksjoner i køer, kalle callback-køer og videreformidle om en synkron eller asynkron operasjon lyktes eller mislyktes.
- Tenk på det som et «løfte» om et fremtidig resultat.
- Det hjelper med å organisere kode som håndterer operasjoner som AJAX-forespørsler, animasjoner eller tidtakere.
Opprette et nytt Deferred-objekt
De kan opprette et nytt Deferred-objekt ved hjelp av $.Deferred(). Dette objektet har metoder for å styre tilstanden: resolve() ved suksess og reject() ved feil.
La oss se hvordan De setter opp et grunnleggende deferred-objekt som fullføres etter en forsinkelse.
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...");Bruke .done() og .fail()
Når De har et Deferred-objekt eller dets promise, kan De legge til callback-funksjoner ved hjelp av .done() ved suksess og .fail() ved feilhåndtering.
Callback-funksjonen .always() kjører uavhengig av om operasjonen lykkes eller mislykkes.
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...");Transformere resultater med .then()
Mens .done() og .fail() brukes til endelig håndtering, er .then() mer allsidig. Den kan transformere den løste verdien eller til og med returnere et nytt promise, slik at sekvensiell behandling blir mulig.
De kan bruke .then() til å behandle et resultat før De sender det videre.
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...");Quiz om caching og Deferred-objekter
Er De klare for en rask utfordring? Test forståelsen Deres av caching av selektorer og Deferred-objekter.
Oppsummering: Raskere og smartere jQuery
Godt jobbet! De har lært hvordan De kan forbedre ytelsen og kodeorganiseringen i jQuery-applikasjonen Deres betydelig:
- Caching av selektorer: Lagre jQuery-utvalg i variabler for å unngå kostbare, gjentatte DOM-oppslag.
- Deferred-objekter: Bruk
$.Deferred(),.resolve(),.reject(),.done(),.fail()og.then()til å håndtere komplekse asynkrone operasjoner på en ryddig og effektiv måte.
Bruk disse teknikkene til å bygge mer robuste og ytelsessterke webapplikasjoner!
Lær deg JavaScript med en AI-veileder – gratis
Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.
- Kurs
- 22
- Leksjoner
- 48
Ofte stilte spørsmål
Er leksjonen «Utnytte bufring og Deferred-objekter» gratis?
Ja – du kan lese valgfritt 3 av leksjonene i læringsstien jQuery Academy, inkludert «Utnytte bufring og Deferred-objekter», gratis i sin helhet her på nettet. Deretter låser CoddyKit PRO opp alle leksjoner, samt interaktiv øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Kurset i jQuery Academy inneholder totalt 3 leksjoner.
Hva lærer jeg i «Utnytte bufring og Deferred-objekter»?
Bruk bufring av velgere for å unngå overflødige DOM-oppslag, og forstå jQuery Deferred-objekter for mer effektiv håndtering av asynkrone operasjoner samt bedre lesbarhet og ytelse i koden. Du øver på jQuery Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.
Trenger jeg erfaring for å begynne med jQuery Academy?
Ingen tidligere erfaring er nødvendig. jQuery Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 3 av 3.
Hvor lang tid tar leksjonen «Utnytte bufring og Deferred-objekter»?
De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.
Kan jeg skrive og kjøre kode i denne jQuery Academy-leksjonen?
Ja. Alle jQuery Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.
Alle leksjonene i dette kurset
- Optimalisere DOM-manipulasjon
- Effektiv hendelseshåndtering og throttling
- Utnytte bufring og Deferred-objekter