Перейти до основного вмісту

Таймери

Внутрішній таймер-планувальник браузера дозволяє відкладати виклик функції на певний період часу. Для цього є тайм-аути та інтервали, які контролюють, коли і як часто викликається функція. Таймери реалізовані в браузері, а не вбудовані в мову, і доступні на глобальному об'єкті window.

Тайм-аут

Метод setTimeout() дозволяє запланувати запуск функції через певний час.

const timerId = setTimeout(callback, delay, arg1, arg2, ...);
  • callback - функція, виконання якої необхідно запланувати.
  • delay - час в мілісекундах, через який callback-функція буде викликана один раз.

Додаткові аргументи (arg1, arg2 тощо) будуть передані callback-функції під час виклику. Повертає цифровий ідентифікатор створеного таймера, який використовується для його видалення.

Якщо нам, з будь-якої причини, потрібно скасувати виклик функції всередині тайм-ауту, використовується метод clearTimeout(id), який приймає ідентифікатор таймера і очищає (видаляє) його.

const greet = () => {
console.log("Hello!");
};

const timerId = setTimeout(greet, 3000);

clearTimeout(timerId);

Оскільки ми викликали clearTimeout(), який виповниться раніше, ніж буде викликана функція greet(), таймер з timerId буде видалений і реєстрація відкладеного виклику greet() скасується. Тому в консоль нічого не виведеться.

Інтервал

Метод setInterval() - це простий спосіб повторення коду знову і знову зі встановленим проміжком часу повторень. Синтаксис і параметри такі самі як у setTimeout(). На відміну від setTimeout(), інтервал запускає виконання функції не один раз, а регулярно повторює її через вказаний проміжок часу. Зупинити виконання можна викликом методу clearInterval(id).

const timerId = setInterval(callback, delay, arg1, arg2, ...);

Клікаючи на кнопку «Start», запустимо інтервал і будемо кожну секунду виводити в консоль рядок. Використовуємо Math.random(), щоб рядки були різні. По кліку на кнопку «Stop» викличемо clearInterval() і передамо ідентифікатор інтервалу, який потрібно зупинити.

Частота спрацьовування лічильника

У браузерного таймера є мінімально можлива затримка. У сучасних браузерах вона коливається приблизно від 0 до 4 мілісекунд. У старіших браузерах затримка може бути більшою і досягати 15 мілісекунд. За стандартом, мінімальна затримка становить 4 мілісекунди, тому різниці між setTimeout(callback, 1) і setTimeout(callback, 4) немає.

Таймер може спрацьовувати рідше, ніж зазначено в параметрі delay, тому що за надто великого завантаження процесора деякі запуски функцій-інтервалів будуть пропущені. Браузери продовжують виконувати тайм-аути та інтервали, навіть якщо вкладка браузера неактивна, але водночас знижують частоту спрацьовування таймерів.