Какие таймеры важны на практике и как их применять?
Асинхронность и 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.