> Как оптимизировать код при отправке запроса на каждый символ ввода (JavaScript)

Уровень: senior · Роль: frontend · Категория: Технические вопросы

Компании: IT-One

Стек: JavaScript

> Пример ответа

Для оптимизации запросов при вводе каждого символа применяется техника debounce (устранение дребезга). Она откладывает выполнение запроса до тех пор, пока пользователь не прекратит ввод на заданное время (обычно 300–500 мс). Пример реализации на JavaScript:

JAVASCRIPT
function debounce(func, delay) {
let timeoutId;
return function(...args) {
clearTimeout(timeoutId);
timeoutId = setTimeout(() => func.apply(this, args), delay);
};
}
// Использование
const searchInput = document.getElementById('search');
const handleSearch = debounce(async (query) => {
if (query.length < 3) return; // минимальная длина запроса
try {
const response = await fetch(`/api/search?q=${query}`);
const data = await response.json();
// обработка результатов
} catch (error) {
console.error('Ошибка запроса:', error);
}
}, 300);
searchInput.addEventListener('input', (e) => handleSearch(e.target.value));

Дополнительные улучшения:

  • Отмена предыдущего запроса при новом вводе через AbortController.

  • Throttle (троттлинг) - если нужно гарантировать выполнение запроса не чаще определённого интервала, даже при быстром вводе.

  • Проверка минимальной длины строки (например, 3 символа) для избежания лишних запросов.

  • Кэширование результатов для одинаковых запросов, чтобы не повторять их.

Выбор между debounce и throttle зависит от сценария: debounce лучше для автодополнения, throttle для отслеживания скролла или изменения размера окна.

> Похожие задачи по frontend

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью