ส่วนตัวผมพบdebounceยากที่จะเข้าใจกว่าเค้น
เนื่องจากทั้งสองฟังก์ชั่นช่วยให้คุณเลื่อนเวลาและลดอัตราการดำเนินการบางอย่างได้ สมมติว่าคุณกำลังเรียกฟังก์ชั่นการตกแต่งที่ส่งคืนโดย throttle / debounce ซ้ำ ๆ ...
- Throttle : ฟังก์ชั่นดั้งเดิมจะถูกเรียกอย่างมากที่สุดหนึ่งครั้งต่อช่วงเวลาที่ระบุ
- debounce : ฟังก์ชั่นเดิมจะเรียกได้ว่าหลังจากที่โทรหยุดการเรียกฟังก์ชั่นการตกแต่งหลังจากระยะเวลาที่กำหนด
ฉันพบส่วนสุดท้ายของการหักล้างสิ่งสำคัญเพื่อเข้าใจเป้าหมายที่พยายามบรรลุ ฉันยังพบเวอร์ชันเก่าของการใช้งาน _.debounce ช่วยทำความเข้าใจ (ความอนุเคราะห์จากhttps://davidwalsh.name/function-debounce )
// Returns a function, that, as long as it continues to be invoked, will not
// be triggered. The function will be called after it stops being called for
// N milliseconds. If `immediate` is passed, trigger the function on the
// leading edge, instead of the trailing.
_.debounce = function(func, wait, immediate) {
var timeout;
return function() {
var context = this, args = arguments;
var later = function() {
timeout = null;
if (!immediate) func.apply(context, args);
};
var callNow = immediate && !timeout;
clearTimeout(timeout);
timeout = setTimeout(later, wait);
if (callNow) func.apply(context, args);
};
};
คำเปรียบเทียบที่ลึกซึ้ง แต่อาจช่วยได้เช่นกัน
คุณมีเพื่อนชื่อ Chatty ที่ชอบคุยกับคุณผ่าน IM สมมติว่าเมื่อเธอพูดถึงเธอส่งข้อความใหม่ทุก 5 วินาทีในขณะที่ไอคอนแอปพลิเคชัน IM ของคุณมีการตีกลับขึ้นและลงคุณสามารถรับ ...
- วิธีการไร้เดียงสา : ตรวจสอบทุกข้อความตราบเท่าที่มาถึง เมื่อไอคอนแอพของคุณเด้งตรวจสอบ มันไม่ใช่วิธีที่มีประสิทธิภาพที่สุด แต่คุณเป็นคนทันสมัยอยู่เสมอ
- วิธีเค้น : คุณตรวจสอบทุกๆ 5 นาที (เมื่อมีใหม่) เมื่อมีข้อความใหม่มาถึงหากคุณตรวจสอบได้ตลอดเวลาใน 5 นาทีสุดท้ายให้ข้ามไป คุณประหยัดเวลาด้วยวิธีนี้ในขณะที่ยังอยู่ในลูป
- Debounce approach: คุณรู้จัก Chatty เธอแบ่งเรื่องราวทั้งหมดออกเป็นชิ้น ๆ ส่งพวกเขาในข้อความเดียว คุณรอจนกว่าช่างพูดจบเรื่องราวทั้งหมด: ถ้าเธอหยุดส่งข้อความ 5 นาทีคุณจะถือว่าเธอเสร็จแล้วตอนนี้คุณตรวจสอบทั้งหมด