Лично я нашел дребезг труднее осмыслить , чем дроссель .
Поскольку обе функции помогут вам отложить и снизить скорость выполнения некоторых. Предполагая, что вы вызываете декорированные функции, возвращаемые throttle / debounce несколько раз ...
- Дроссель : исходная функция вызывается не более одного раза за указанный период.
- 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);
};
};
Надуманная метафора, но, возможно, также может помочь.
У вас есть друг по имени Чатти, который любит общаться с вами через чат. Предполагая, что когда она говорит, она отправляет новое сообщение каждые 5 секунд, в то время как значок вашего приложения чата подпрыгивает вверх и вниз, вы можете ...
- Наивный подход: проверяйте каждое сообщение по мере его поступления. Когда значок вашего приложения подпрыгивает, проверьте. Это не самый эффективный способ, но вы всегда в курсе.
- Подход газа : вы проверяете один раз каждые 5 минут (когда появляются новые). Когда приходит новое сообщение, если вы проверили в любое время за последние 5 минут, игнорируйте его. С этим подходом вы экономите свое время, оставаясь в курсе событий.
- Подход « Дебад» : вы знаете, Чэтти, она разбивает целую историю на части, отправляет их в одном сообщении за другим Вы ждете, пока Чэтти закончит всю историю: если она перестанет отправлять сообщения на 5 минут, вы предположите, что она закончила, теперь вы проверяете все.