Вопрос проверяет знание паттернов для предотвращения дублирования сетевых запросов, что важно для оптимизации производительности и избежания лишней нагрузки на сервер.
Когда пользователь быстро кликает кнопку отправки формы или вводит текст в поисковую строку, браузер может отправить несколько одинаковых запросов к серверу. Это приводит к избыточной нагрузке на сервер, возможным ошибкам (например, дублирование заказов) и ухудшению производительности приложения.
Пример реализации debounce для поискового запроса:
function debounce(fn, delay) {
let timer;
return function(...args) {
clearTimeout(timer);
timer = setTimeout(() => fn.apply(this, args), delay);
};
}
const search = debounce(async (query) => {
const response = await fetch(`/api/search?q=${query}`);
const data = await response.json();
// обновить UI
}, 300);
document.getElementById('searchInput')
.addEventListener('input', (e) => search(e.target.value));Пример отмены предыдущего запроса с AbortController:
let controller;
async function search(query) {
if (controller) controller.abort();
controller = new AbortController();
try {
const response = await fetch(`/api/search?q=${query}`, {
signal: controller.signal
});
const data = await response.json();
// обновить UI
} catch (err) {
if (err.name !== 'AbortError') throw err;
}
}Применение debounce, throttle, отмены запросов или кэширования помогает избежать дублирования запросов, снижает нагрузку на сервер и улучшает отзывчивость интерфейса. Выбор метода зависит от сценария: для поиска при вводе лучше debounce, для скролла — throttle, для кнопок отправки — блокировка повторных кликов.
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию