Это не просто еще одна статья, пытающаяся объяснить, как работает или дросселя работает на уровне кода, а это иллюстрация, чтобы запомнить и визуализировать концепцию, чтобы вы могли практически применять их на своей работе.
лично я часто забываю о концепциях дебауна и дросселирования, поэтому, когда кто -то просит меня объяснить их - или, если в интервью появляется вопрос - я просто моргаю? Чтобы избежать этого, я сделал простую страницу, чтобы помочь освежить мою память. Если вы не хотите чувствовать себя как самозванца?.
]]в приведенном коде я установил задержку на 2 секунды как для дебюра, так и для дросселя. Попробуйте нажать на случайные продукты и приложить паузу.
]
]
]
ссылка на страницу
]
представьте, что вы находитесь в ресторане и хотите заказать немного еды, поэтому вы выбираете меню со стола и просто начинаете читать все предметы. (На веб -странице я поделился, нажимать на различные продукты питания будет эквивалентно чтению пункта меню)
]аналогия здесь
]и представьте, что в ресторане есть три различных типа официантов, которые могут служить вам: ]
]? ] принимает обращение каждый раз, когда вы упоминаете элемент
] , когда вы начнете читать меню, он будет ждать, пока вы сделаете паузу как минимум за 2 секунды, прежде чем принимать заказ.
]] принимает заказы только один раз каждые 2 секунды
]] Зачем все равно дебайти или дроссель?Debouncing: ожидает активности (кнопка нажатия), чтобы остановиться для указанного времени, чтобы запустить
Throttling: триггеры через регулярные промежутки времени, независимо от того, когда деятельность останавливается
]- также 2 сек - это просто то, что я использовал в качестве примера, это может быть любой Tiperiod
- ]
]- ]
] Объяснение
]
В JS обработчики событий - это просто функции, которые выполняются, когда возникают конкретные события (такие как клики, печатание или прокрутка).]
]
// Основной обработчик событий
button.addeventListener ('click', function () {
console.log ('кнопка нажала!');
});
// Основной обработчик клавиш
input.addeventlistener ('keyup', function () {
console.log ('клавиша нажала!');
});
]
// Basic event handler button.addEventListener('click', function() { console.log('Button clicked!'); }); // Basic keystroke handler input.addEventListener('keyup', function() { console.log('Key pressed!'); });скажем, например, у вас есть кнопка, которая сделает вызов API
function makeApicall () {
console.log ("API Call сделан");
}
Button.AddeventListener ('click', () => {
makeapicall ();
});
]
function makeApiCall() { console.log("API call made"); } button.addEventListener('click', () => { makeApiCall(); });Это поведение по умолчанию.
] , но стрельба по вызову API каждый раз для события может быть неэффективным, и в большинстве случаев это не то, что вы ищете. Вот где дроссель и деберуется на картинку. ]
, если вы хотите забрать определение из этой статьи, может быть, это то, что.дросселирование и дебаунгирование - два наиболее распространенных способа управления частотой ответа слушателя.
] ] Дезась ]
я не собираюсь объяснять код для дебаутирования, так как это может быть просто импортировано из Lodash, скорее мы увидим, где вы можете его использовать.]
в нашем примере, если пользователь продолжает нажимать на кнопку даже в течение 5 минут подряд, вызов API будет выполнен только один раз.]
, так что здесь происходят две вещи:
] ] пользователь должен перестать нажать.
]]
] Заключение]
, как упомянуто в статье, это не для того, чтобы объяснить, как функции работают скорее, чтобы визуализировать и понять, почему они используются. Я наверняка рекомендую вам понять на уровне кода, как они работают, но лично все равно будет использовать Debounce и дроссель, предоставленные Lodash Library, а не для переосмысления колеса.]
]]
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3