PassFront
  1. PassFront
  2. База знаний
  3. Асинхронность и Event Loop

Какие таймеры важны на практике и как их применять?

Асинхронность и Event Loop

Важные таймеры: `setTimeout` (однократно), `setInterval` (повторяющийся), `requestAnimationFrame` (синхронно с кадрами), `requestIdleCallback` (в простое). Применяются по задаче.

Таймеры и применение

setTimeout

Однократное выполнение через задержку:

setTimeout(() => doWork(), 1000);
clearTimeout(id);
  • Когда: отложить действие, debounce, разбить работу.

setInterval

Повторяющееся выполнение:

setInterval(() => poll(), 5000);
clearInterval(id);
  • Когда: периодические задачи (опросы). Осторожно с дрейфом/наслоением; для точности — рекурсивный setTimeout.

requestAnimationFrame

Коллбэк перед перерисовкой (~60 FPS), синхронно с кадрами:

requestAnimationFrame(function loop(t) {
  animate(t);
  requestAnimationFrame(loop);
});
  • Когда: анимации (плавно, паузится в фоне, экономит батарею).

requestIdleCallback

Выполнение в моменты простоя браузера:

requestIdleCallback(() => doLowPriorityWork());
  • Когда: некритичные фоновые задачи (аналитика, предзагрузка), не мешая важному.

Различия

  • setTimeout/setInterval — макрозадачи, по времени; неточные.
  • rAF — синхронно с кадрами, для анимаций.
  • requestIdleCallback — в простое, для низкоприоритетного.

Как выбирать

  • Отложить/debounce → setTimeout.
  • Периодически → setInterval (или рекурсивный setTimeout для точности).
  • Анимация → requestAnimationFrame.
  • Фоновая низкоприоритетная работа → requestIdleCallback.

Коротко для собеседования

Таймеры: setTimeout (однократно — отложить, debounce), setInterval (периодически — опросы, но дрейф), requestAnimationFrame (синхронно с кадрами — анимации, паузится в фоне), requestIdleCallback (в простое — некритичные задачи). setTimeout/setInterval неточны (макрозадачи); для анимаций — rAF, для фона — requestIdleCallback.

Другие вопросы раздела