1+1
Киберпредложение!
Скидки до 30 000₽ + 2 ая профессия в подарок до 31.01

в чем разница между throttle и debounce в javascript и какие у них ограничения

Аватар пользователя Ivan Gagarinov
Ivan Gagarinov
27 ноября 2024

Это две техники ограничения частоты выполнения функции в JavaScript, но они используются в разных сценариях и имеют свои особенности.

Throttle позволяет ограничить выполнение функции так, чтобы она выполнялась не чаще чем через заданный интервал времени. То есть, как только функция была вызвана, она не будет вызвана снова до окончания заданного периода времени.

Обычно он используется для обработки событий, которые возникают часто, таких как прокрутка (scroll), изменение размера окна (resize) или перемещение мыши (mousemove). Это помогает уменьшить нагрузку на систему, так как функция будет вызываться с фиксированным интервалом, вместо того чтобы вызываться каждый раз, когда происходит событие.

function throttle(func, limit) {
  let lastFunc;
  let lastRan;

  return function() {
    const context = this;
    const args = arguments;
    if (!lastRan) {
      func.apply(context, args);
      lastRan = Date.now();
    } else {
      clearTimeout(lastFunc);
      lastFunc = setTimeout(function() {
        if ((Date.now() - lastRan) >= limit) {
          func.apply(context, args);
          lastRan = Date.now();
        }
      }, limit - (Date.now() - lastRan));
    }
  };
}

// Использование
const throttledFunction = throttle(() => {
  console.log('Triggered!');
}, 2000);

// Пример привязки к событию
window.addEventListener('scroll', throttledFunction);

Debounce обеспечивает задержку выполнения функции до тех пор, пока событие не прекратится. То есть, функция будет вызвана только после того, как прошло заданное время с момента последнего вызова.

Debounce часто используется в ситуациях, когда вы хотите, чтобы функция вызывалась только после завершения активных действий, например, при вводе текста в поле на форме или при завершении изменения размера окна. Это предотвращает выполнение функции на каждом нажатии клавиши или каждый раз, когда происходит событие.

function debounce(func, delay) {
  let debounceTimer;
  return function() {
    const context = this;
    const args = arguments;
    clearTimeout(debounceTimer);
    debounceTimer = setTimeout(() => func.apply(context, args), delay);
  };
}

// Использование
const debouncedFunction = debounce(() => {
  console.log('Triggered after typing!');
}, 300);

// Пример привязки к событию
const inputField = document.getElementById('input');
inputField.addEventListener('input', debouncedFunction);
0 0

Есть что добавить? Зарегистрируйтесь

или войдите в аккаунт

Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»

Курсы по программированию в Хекслете

Программирование

Веб-разработка

Разработка, верстка и деплой сайтов и веб-приложений, трудоустройство для разработчиков

Frontend-разработка

Разработка внешнего интерфейса сайтов и веб-приложений и верстка

Создание сайтов

Разработка сайтов и веб-приложений на JS, Python, Java, PHP и Ruby on Rails

Backend-разработка

Разработка серверной части сайтов и веб-приложений

Тестирование

Ручное тестирование и автоматизированное тестирование на JS, Python, Java и PHP

Аналитика данных

Сбор, анализ и интерпретация данных на Python

Интенсивные курсы

Интенсивное обучение для продолжающих

DevOps

Автоматизация настройки локального окружения и серверов, развертывания и деплоя

Математика для программистов

Обучение разделам математики, которые будут полезны при изучении программирования

Тест-драйв

JavaScript

Разработка сайтов и веб-приложений и автоматизированное тестирование на JS

Python

Веб-разработка, автоматическое тестирование и аналитика данных на Python

Java

Веб-разработка и автоматическое тестирование на Java

PHP

Веб-разработка и автоматическое тестирование на PHP

Ruby

Разработка сайтов и веб-приложений на Ruby on Rails

Go

Курсы по веб-разработке на языке Go

Верстка

HTML

Современная верстка с помощью HTML и CSS

SQL

Проектирование базы данных, выполнение SQL-запросов и изучение реляционных СУБД

Git

Система управления версиями Git, регулярные выражения и основы командой строки

Бесплатные курсы

Бесплатные курсы по тестированию, дата-аналитике, верстке, программированию на Python, Java, PHP и JavaScript.

Фреймворки

Базы данных