การใช้ประโยชน์จากแคชและออบเจ็กต์ Deferred
ใช้แคชตัวเลือกเพื่อหลีกเลี่ยงการค้นหา DOM ซ้ำซ้อน และทำความเข้าใจออบเจ็กต์ Deferred ของ jQuery เพื่อจัดการการดำเนินการแบบอะซิงโครนัสได้อย่างมีประสิทธิภาพยิ่งขึ้น พร้อมปรับปรุงความอ่านง่ายและประสิทธิภาพของโค้ด
การใช้ประโยชน์จากแคชและออบเจ็กต์ Deferred เป็นบทเรียน jQuery Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 3 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน jQuery Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส jQuery Academy มีบทเรียนทั้งหมด 3 บทเรียน
เพิ่มประสิทธิภาพด้วยการแคชและ Deferred
ยินดีต้อนรับ! ในบทเรียนนี้ เราจะสำรวจเทคนิคทรงพลังสองอย่างที่ช่วยให้แอปพลิเคชัน jQuery ทำงานได้เร็วและมีประสิทธิภาพยิ่งขึ้น ได้แก่ การแคชตัวเลือก และ ออบเจ็กต์ Deferred
วิธีเหล่านี้ช่วยลดงานที่ทำซ้ำและจัดการการดำเนินงานแบบไม่พร้อมกันที่ซับซ้อนได้อย่างง่ายดาย
เหตุใดการแคชตัวเลือกจึงสำคัญ
ทุกครั้งที่คุณใช้ตัวเลือก jQuery เช่น $("#myElement") หรือ $(".item") jQuery จะต้องสำรวจ Document Object Model (DOM) เพื่อค้นหาองค์ประกอบที่ตรงกัน
- การสำรวจนี้อาจช้า โดยเฉพาะกับตัวเลือกที่ซับซ้อนหรือโครงสร้าง DOM ขนาดใหญ่
- การค้นหาองค์ประกอบเดิมซ้ำ ๆ ทำให้สิ้นเปลืองพลังการประมวลผล
การแคชช่วยหลีกเลี่ยงปัญหานี้ได้
จัดเก็บผลการเลือกของคุณ
แทนที่จะค้นหา DOM หลายครั้ง ให้จัดเก็บผลลัพธ์จากการเลือกด้วย jQuery ไว้ในตัวแปร ตัวแปรนี้จะเก็บข้อมูลอ้างอิงไปยังออบเจ็กต์ jQuery
ลองเรียกใช้ตัวอย่างนี้เพื่อดูวิธีแคชผลการเลือก:
// 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");การเชื่อมเมธอดเพื่อประสิทธิภาพ
การเชื่อมเมธอดของ jQuery เป็นรูปแบบหนึ่งของการเพิ่มประสิทธิภาพอยู่แล้ว เนื่องจากทำงานกับชุดองค์ประกอบที่เลือกไว้ชุดเดิม
อย่างไรก็ตาม การแคชมีความสำคัญเมื่อคุณต้องดำเนินการกับองค์ประกอบเดิมในจุดต่าง ๆ ของโค้ด หรือภายในตัวจัดการเหตุการณ์หลายตัว
// 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");นำผลการเลือกกลับมาใช้ซ้ำ
ลองพิจารณาสถานการณ์ที่คุณโต้ตอบกับกลุ่มองค์ประกอบเดิมอยู่บ่อยครั้ง การแคชผลการเลือกครั้งแรกจะช่วยป้องกันการค้นหา DOM ซ้ำ
วิธีนี้มีประโยชน์เป็นพิเศษภายในลูป ตัวจัดการเหตุการณ์ หรือฟังก์ชันที่ทำงานกับชุดองค์ประกอบเดิม
// 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();การจัดการการดำเนินงานแบบไม่พร้อมกัน
ออบเจ็กต์ Deferred ใน jQuery เป็นวิธีลงทะเบียนฟังก์ชันเรียกกลับหลายรายการลงในคิว เรียกใช้คิวฟังก์ชันเรียกกลับ และส่งต่อสถานะสำเร็จหรือล้มเหลวของการดำเนินงานแบบพร้อมกันหรือแบบไม่พร้อมกัน
- ลองนึกภาพว่าเป็น "promise" สำหรับผลลัพธ์ในอนาคต
- ช่วยจัดระเบียบโค้ดที่จัดการการดำเนินงานต่าง ๆ เช่น คำขอ AJAX ภาพเคลื่อนไหว หรือตัวจับเวลา
สร้าง Deferred ใหม่
คุณสามารถสร้างออบเจ็กต์ Deferred ใหม่ได้โดยใช้ $.Deferred() ออบเจ็กต์นี้มีเมธอดสำหรับควบคุมสถานะ ได้แก่ resolve() เมื่อสำเร็จ และ reject() เมื่อล้มเหลว
มาดูวิธีตั้งค่า deferred พื้นฐานที่เปลี่ยนเป็นสำเร็จหลังจากหน่วงเวลา
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...");การใช้ .done() และ .fail()
เมื่อคุณมีออบเจ็กต์ Deferred (หรือ promise ของออบเจ็กต์นั้น) แล้ว คุณสามารถแนบฟังก์ชันเรียกกลับได้โดยใช้ .done() สำหรับกรณีสำเร็จ และ .fail() สำหรับจัดการข้อผิดพลาด
ฟังก์ชันเรียกกลับ .always() จะทำงานไม่ว่าจะสำเร็จหรือล้มเหลว
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...");แปลงผลลัพธ์ด้วย .then()
ขณะที่ .done() และ .fail() ใช้สำหรับการจัดการขั้นสุดท้าย .then() มีความยืดหยุ่นมากกว่า โดยสามารถแปลงค่าที่เปลี่ยนเป็นสำเร็จ หรือแม้แต่ส่งคืน promise ใหม่ ซึ่งช่วยให้ประมวลผลตามลำดับได้
คุณสามารถใช้ .then() เพื่อประมวลผลผลลัพธ์ก่อนส่งต่อได้
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...");แบบทดสอบการแคชและ Deferred
พร้อมสำหรับโจทย์ท้าทายสั้น ๆ หรือยัง ทดสอบความเข้าใจของคุณเกี่ยวกับการแคชตัวเลือกและออบเจ็กต์ Deferred
สรุป: jQuery ที่เร็วและชาญฉลาดยิ่งขึ้น
ทำได้ดีมาก! คุณได้เรียนรู้วิธีปรับปรุงประสิทธิภาพและการจัดระเบียบโค้ดของแอปพลิเคชัน jQuery อย่างมาก:
- การแคชตัวเลือก: จัดเก็บผลการเลือกด้วย jQuery ไว้ในตัวแปร เพื่อหลีกเลี่ยงการค้นหา DOM ซ้ำ ๆ ที่ใช้ทรัพยากรมาก
- ออบเจ็กต์ Deferred: ใช้
$.Deferred(),.resolve(),.reject(),.done(),.fail()และ.then()เพื่อจัดการการดำเนินงานแบบไม่พร้อมกันที่ซับซ้อนได้อย่างเป็นระเบียบและมีประสิทธิภาพ
นำเทคนิคเหล่านี้ไปใช้เพื่อสร้างเว็บแอปพลิเคชันที่มีความทนทานและประสิทธิภาพสูงยิ่งขึ้น
คำถามที่พบบ่อย
บทเรียน “การใช้ประโยชน์จากแคชและออบเจ็กต์ Deferred” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การใช้ประโยชน์จากแคชและออบเจ็กต์ Deferred” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส jQuery Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส jQuery Academy มีบทเรียนทั้งหมด 3 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การใช้ประโยชน์จากแคชและออบเจ็กต์ Deferred”
ใช้แคชตัวเลือกเพื่อหลีกเลี่ยงการค้นหา DOM ซ้ำซ้อน และทำความเข้าใจออบเจ็กต์ Deferred ของ jQuery เพื่อจัดการการดำเนินการแบบอะซิงโครนัสได้อย่างมีประสิทธิภาพยิ่งขึ้น พร้อมปรับปรุงความอ่านง่ายและประสิทธิภ… คุณปฏิบัติ jQuery Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน jQuery Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน jQuery Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 3 บทเรียน
บทเรียน “การใช้ประโยชน์จากแคชและออบเจ็กต์ Deferred” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน jQuery Academy นี้ได้ไหม
ได้ บทเรียน jQuery Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การปรับปรุงประสิทธิภาพการดำเนินการกับ DOM
- การจัดการเหตุการณ์และการจำกัดความถี่อย่างมีประสิทธิภาพ
- การใช้ประโยชน์จากแคชและออบเจ็กต์ Deferred