Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

Документы

Медиа

Назад
Вопрос про JavaScript: polling, setinterval, settimeout

Чем setInterval хуже setTimeout для polling?

Вопрос проверяет, понимаешь ли ты, как планирование задач в JS влияет на сеть и нагрузку при периодических запросах.

Короткий ответ

setInterval запускает обработчик по расписанию, даже если предыдущий запрос ещё не закончился, из-за чего появляются параллельные запросы и лишняя нагрузка. Интервалы также “плывут” (drift): если обработчик выполняется долго, фактические моменты запуска смещаются. setTimeout удобнее для polling, потому что позволяет запускать следующий запрос после завершения предыдущего и гибко менять задержку (например, при ошибках увеличить).

Длинный ответ

Polling — это повторяющиеся запросы “проверить состояние”. Для него важно контролировать конкуренцию и частоту.

Определение

Определение: Polling — периодическая проверка сервера клиентом (например, “появились ли новые данные?”).

Проблемы setInterval в polling

  1. Наложение запросов (overlap)

    • Если запрос идёт 3 секунды, а interval = 1 секунда, то за 10 секунд накопится пачка запросов.

  2. Непредсказуемая нагрузка

    • Сервер получает всплески, клиент — рост потребления памяти/сети.

  3. Сложнее делать backoff

    • При ошибках или 429 нужно увеличивать паузу, а у setInterval это менее удобно (часто приходится clearInterval и ставить заново).

  4. Drift и очередь событий

    • Если вкладка “тормозит” или поток занят, срабатывания могут сдвигаться и сгущаться.

Почему setTimeout обычно лучше

  1. Следующий тик после завершения

    • Запускаем таймер только когда закончили текущий запрос.

  2. Гибкая задержка

    • Можно динамически менять интервал: нормальный режим, backoff при ошибках, пауза при скрытой вкладке.

Пример polling на setTimeout (без наложений)

let stopped = false;

async function poll() {
  try {
    const res = await fetch("/api/status");
    // обработка res...
    if (!stopped) setTimeout(poll, 1000);
  } catch (e) {
    // при ошибке можно увеличить интервал
    if (!stopped) setTimeout(poll, 3000);
  }
}

poll();
// чтобы остановить:
stopped = true;

Вывод

setTimeout для polling обычно предпочтительнее, потому что даёт контроль: нет параллельных запросов, проще backoff и понятнее управление частотой.

Уровень

  • Рейтинг:

    4

  • Сложность:

    5

Навыки

  • JavaScript

    JavaScript

Ключевые слова

#polling

#setinterval

#settimeout

Подпишись на React Developer в телеграм