Запуск JavaScript кода каждую минуту: setInterval и jQuery

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Чтобы выполнить функцию каждую минуту в JavaScript, примените метод setInterval() с интервалом 60000 миллисекунд. Пример кода:

JS
Скопировать код
setInterval(() => console.log('Прошла 1 минута, дружище.'), 60000);
Кинга Идем в IT: пошаговый план для смены профессии

Продвинутые методики работы с таймером

Аккуратность таймера: работает как часы

Метод setInterval() обладает достаточной точностью, однако нагруженная очередь событий или продолжительные вычисления могут вызывать небольшие задержки. Чтобы минимизировать влияние этих задержек, следует контролировать ожидаемое время выполнения:

JS
Скопировать код
let expected = Date.now() + 60000;
setInterval(() => {
  const drift = Date.now() – expected;
  expected += 60000;
  console.log('Находим и учитываем сдвиг времени: ', drift);
}, 60000);

Запуск с отсчётом от первой минуты

Для начала выполнения функции в начале каждой минуты необходимо вычислить время до первого вызова и применить setTimeout():

JS
Скопировать код
const startOfNextMinute = (new Date()).setSeconds(0, 0) + 60000;
const timeToNextMinute = startOfNextMinute – Date.now();

setTimeout(() => {
  myFunction();
  setInterval(myFunction, 60000);
}, timeToNextMinute);

Как остановить выполнение интервала

Чтобы прервать выполнение функции через заданные интервалы, записывают идентификатор, который возвращает setInterval(), и затем используют clearInterval():

JS
Скопировать код
const intervalId = setInterval(() => console.log('Привет!'), 60000);

clearInterval(intervalId);

Визуализация

Представьте себе часовую башню, которая отбивает каждый час. Также есть мини-часы, издающие звук каждую минуту:

Markdown
Скопировать код
Часовой звон: 🕰️ = ДОНГ... ДОНГ... ДОНГ...
Минутный звон: ⏲️ = динь... динь... динь...

Аналогично метод setInterval() вызывает вашу функцию каждые 60 секунд, как и мини-часы издают динь-динь.

JS
Скопировать код
setInterval(chime, 60000);

function chime() {
  console.log('динь...');
}

Наши функции работают как ⏲️, срабатывая каждую минуту.

Использование setTimeout для минимальной погрешности при первичном запуске

Старт без промедления для идеалистов

Если в работе требуется наивысшая точность, setTimeout осуществляет запуск кода в начале каждой минуты:

JS
Скопировать код
function executePrecisely() {
  const now = new Date();
  const delay = 60000 – (now.getSeconds() * 1000 + now.getMilliseconds());

  setTimeout(function startInterval() {
    myFunction();
    setInterval(myFunction, 60000);
  }, delay);
}
executePrecisely();

Скорый запуск без ожидания

setTimeout обеспечивает гарантию, что код начнет работу с начала новой минуты, не требуя ожидания.

Рекомендации по совершенствованию кода

Применение именованных функций

Для облегчения читаемости и поддержки кода рекомендуется использовать именованные функции:

JS
Скопировать код
function performAction() {
  // Ваш код
}

setInterval(performAction, 60000);

Разделение ответственности

Отделите логику отсчёта времени от выполнения задач для улучшения структуры и организации кода:

JS
Скопировать код
function timerCallback() {
  performAction();
  updateState();
}

const intervalId = setInterval(timerCallback, 60000);

Полезные материалы

  1. Метод Window setInterval() — Обзор работы интервалов в JavaScript.
  2. Глобальная функция setInterval() – Web API | MDN — Детальное описание метода setInterval().
  3. javascript – Что отличает рекурсивный setTimeout от setInterval? – Stack Overflow — Сравнение методов setInterval и setTimeout.
  4. Moment.js | Главная — Библиотека для обработки дат и времени.
  5. Глобальная функция clearInterval() – Web API | MDN — Инструкция о том, как остановить интервалы.
  6. Как использовать промисы – Обучение веб-разработке | MDN — Об асинхронности, операциях и промисах.
  7. Планирование: setTimeout и setInterval — Обстоятельное изучение таймеров в JavaScript.