0Pricing
jQuery Academy · บทเรียน

การใช้ประโยชน์จากแคชและออบเจ็กต์ 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. การปรับปรุงประสิทธิภาพการดำเนินการกับ DOM
  2. การจัดการเหตุการณ์และการจำกัดความถี่อย่างมีประสิทธิภาพ
  3. การใช้ประโยชน์จากแคชและออบเจ็กต์ Deferred
← กลับไปที่ jQuery Academy