Запуск JavaScript кода каждую минуту: setInterval и jQuery
Пройдите тест, узнайте какой профессии подходите
Быстрый ответ
Чтобы выполнить функцию каждую минуту в JavaScript, примените метод setInterval()
с интервалом 60000 миллисекунд. Пример кода:
setInterval(() => console.log('Прошла 1 минута, дружище.'), 60000);
Продвинутые методики работы с таймером
Аккуратность таймера: работает как часы
Метод setInterval()
обладает достаточной точностью, однако нагруженная очередь событий или продолжительные вычисления могут вызывать небольшие задержки. Чтобы минимизировать влияние этих задержек, следует контролировать ожидаемое время выполнения:
let expected = Date.now() + 60000;
setInterval(() => {
const drift = Date.now() – expected;
expected += 60000;
console.log('Находим и учитываем сдвиг времени: ', drift);
}, 60000);
Запуск с отсчётом от первой минуты
Для начала выполнения функции в начале каждой минуты необходимо вычислить время до первого вызова и применить setTimeout()
:
const startOfNextMinute = (new Date()).setSeconds(0, 0) + 60000;
const timeToNextMinute = startOfNextMinute – Date.now();
setTimeout(() => {
myFunction();
setInterval(myFunction, 60000);
}, timeToNextMinute);
Как остановить выполнение интервала
Чтобы прервать выполнение функции через заданные интервалы, записывают идентификатор, который возвращает setInterval()
, и затем используют clearInterval()
:
const intervalId = setInterval(() => console.log('Привет!'), 60000);
clearInterval(intervalId);
Визуализация
Представьте себе часовую башню, которая отбивает каждый час. Также есть мини-часы, издающие звук каждую минуту:
Часовой звон: 🕰️ = ДОНГ... ДОНГ... ДОНГ...
Минутный звон: ⏲️ = динь... динь... динь...
Аналогично метод setInterval()
вызывает вашу функцию каждые 60 секунд, как и мини-часы издают динь-динь.
setInterval(chime, 60000);
function chime() {
console.log('динь...');
}
Наши функции работают как ⏲️, срабатывая каждую минуту.
Использование setTimeout для минимальной погрешности при первичном запуске
Старт без промедления для идеалистов
Если в работе требуется наивысшая точность, setTimeout
осуществляет запуск кода в начале каждой минуты:
function executePrecisely() {
const now = new Date();
const delay = 60000 – (now.getSeconds() * 1000 + now.getMilliseconds());
setTimeout(function startInterval() {
myFunction();
setInterval(myFunction, 60000);
}, delay);
}
executePrecisely();
Скорый запуск без ожидания
setTimeout
обеспечивает гарантию, что код начнет работу с начала новой минуты, не требуя ожидания.
Рекомендации по совершенствованию кода
Применение именованных функций
Для облегчения читаемости и поддержки кода рекомендуется использовать именованные функции:
function performAction() {
// Ваш код
}
setInterval(performAction, 60000);
Разделение ответственности
Отделите логику отсчёта времени от выполнения задач для улучшения структуры и организации кода:
function timerCallback() {
performAction();
updateState();
}
const intervalId = setInterval(timerCallback, 60000);
Полезные материалы
- Метод Window setInterval() — Обзор работы интервалов в JavaScript.
- Глобальная функция setInterval() – Web API | MDN — Детальное описание метода
setInterval()
. - javascript – Что отличает рекурсивный setTimeout от setInterval? – Stack Overflow — Сравнение методов
setInterval
иsetTimeout
. - Moment.js | Главная — Библиотека для обработки дат и времени.
- Глобальная функция clearInterval() – Web API | MDN — Инструкция о том, как остановить интервалы.
- Как использовать промисы – Обучение веб-разработке | MDN — Об асинхронности, операциях и промисах.
- Планирование: setTimeout и setInterval — Обстоятельное изучение таймеров в JavaScript.