Ответ вслух Junior Функции высшего порядка спрашивают часто обновлено

Debounce против throttle

Вопрос

Чем debounce отличается от throttle и где что применять?

Попробуйте сами

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

Показать ответ и разбор

Коротко

debounce откладывает вызов, пока события не прекратятся на заданное время: срабатывает один раз после паузы. throttle пропускает вызовы не чаще чем раз в интервал - срабатывает регулярно во время потока событий. Поиск по мере ввода, автосохранение, валидация - debounce: промежуточные состояния не нужны.

Что должно прозвучать в ответе

  • debounce откладывает вызов до паузы в событиях

  • throttle пропускает не чаще раза в интервал

  • debounce - поиск по вводу, автосохранение, валидация

  • throttle - скролл, resize, mousemove, отправка аналитики

  • у debounce нужен способ отменить отложенный вызов при размонтировании

  • leading и trailing определяют, вызывать в начале или в конце окна

Что могут спросить следом

  • Напиши debounce с методом cancel
  • Что такое leading edge и когда он нужен
  • Почему debounce нельзя создавать прямо в теле компонента

Разбор

debounce откладывает вызов, пока события не прекратятся на заданное время: срабатывает один раз после паузы. throttle пропускает вызовы не чаще чем раз в интервал - срабатывает регулярно во время потока событий.

Поиск по мере ввода, автосохранение, валидация - debounce: промежуточные состояния не нужны. Скролл, resize, mousemove, отправка метрик - throttle: нужна регулярность, но не каждый кадр.

Оба нужно уметь отменять: отложенный вызов после размонтирования компонента - типичный источник ошибки «обновление состояния размонтированного».

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.