Secara pribadi saya temukan debounce lebih sulit untuk dipahami daripada throttle .
Karena kedua fungsi ini membantu Anda menunda dan mengurangi laju beberapa eksekusi. Anggap Anda memanggil fungsi-fungsi yang dihiasi yang dikembalikan oleh throttle / debounce berulang kali ...
- Mencekik : fungsi asli dipanggil paling banyak sekali per periode yang ditentukan.
- Debounce : fungsi asli dipanggil setelah pemanggil berhenti memanggil fungsi yang didekorasi setelah periode tertentu .
Saya menemukan bagian terakhir debounce penting untuk memahami tujuan yang ingin dicapai. Saya juga menemukan versi lama implementasi _.debounce membantu pemahaman (milik 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);
};
};
Metafora yang dibuat-buat, tapi mungkin juga bisa membantu.
Anda memiliki teman bernama Chatty yang suka berbicara dengan Anda melalui IM. Dengan asumsi ketika dia berbicara dia mengirim pesan baru setiap 5 detik, sementara ikon aplikasi IM Anda memantul ke atas dan ke bawah, Anda dapat ...
- NaifPendekatan : periksa setiap pesan selama pesan diterima. Saat ikon aplikasi Anda memantul, periksa. Ini bukan cara yang paling efektif, tetapi Anda selalu up-to-date.
- MencekikPendekatan : Anda memeriksa setiap 5 menit (bila ada yang baru). Ketika pesan baru tiba, jika Anda telah memeriksa kapan saja dalam 5 menit terakhir, abaikan saja. Anda menghemat waktu Anda dengan pendekatan ini, saat masih dalam lingkaran.
- Pendekatan debounce : Anda tahu Chatty, dia memecah cerita keseluruhan menjadi berkeping-keping, mengirimkannya dalam satu pesan demi satu. Anda menunggu sampai Chatty menyelesaikan keseluruhan cerita: jika dia berhenti mengirim pesan selama 5 menit, Anda akan menganggap dia telah selesai, sekarang Anda memeriksa semua.