Nodejs setInterval для повторения задачи каждые 30 секунд

Я создал приложение nodejs, которое должно выполнять несколько задач.

В моем app.js есть вызов функции модуля менеджера, который управляет этими задачами.

Я хочу вызывать эту функцию из моего app.js и выполнять эти задачи каждые 30 секунд.

что-то типа:

setInterval(manager.tasks(), 30000);

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

Есть ли более эффективный способ сделать это или setInterval в порядке?

О, насколько тяжела твоя функция? Потому что setInterval сам по себе должен иметь незначительные накладные расходы — он просто ставит вещи в очередь на потом. Если для выполнения задачи, которую он выполняет, требуется 10 секунд, это может быть другое дело, но на самом деле это не так уж сильно зависит от setInterval.

VLAZ 19.06.2019 10:56

Вы также можете запустить «задание», которое запускается внутри setInterval извне, например. кронтаб.

Bernhard 19.06.2019 10:59

Я не могу сказать, насколько он тяжелый. Менеджер выполняет несколько http-запросов и некоторые другие мелочи, такие как массивы фильтров и т. д. Я подумал об использовании модуля событий nodejs. Когда я заканчиваю выполнение всех задач, я излучаю сигнал и жду 30 секунд, прежде чем снова вызвать менеджеру. Будет ли это лучшим решением?

EAzevedo 19.06.2019 11:10
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
3
1 834
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Вместо этого используйте узел-cron или узел-расписание.

setInterval реализован в стандартном node js, у вас не будет проблем с производительностью/блокировкой, большинство библиотек также используют setInterval

Ответ принят как подходящий

это зависит от того, насколько тяжелая работа/обработка, которую вы хотите выполнить, setInterval является асинхронной, поэтому ваш код будет запускаться только один раз каждые 30 секунд, но в то же время JavaScript является однопоточным, поэтому, если вы делаете много работать в вашей задаче, один раз, когда он запускается за 30 секунд, это может занять слишком много времени, что приведет к блокировке ресурсов.

В большинстве случаев вы должны использовать setInterval, но если вы действительно хотите эмулировать многопоточность или если вы выполняете слишком много работы в своей задаче, вы можете создать еще один дочерний процесс https://nodejs.org/api/child_process.html или использовать новый API рабочих потоков. Вместо этого используйте https://nodejs.org/api/worker_threads.html, но имейте в виду, что его не так просто реализовать, как вызов setInterval.

Это полностью зависит от функции, которую вы выполняете внутри setInterval. Если это операция, связанная с вводом-выводом, вам не нужно слишком беспокоиться, потому что libuv будет обрабатывать себя. это.

Другие вопросы по теме