Назад | Перейти на главную страницу

Задание Cron против NodeJS setInterval для оптимальной производительности

Я создаю простой скрипт nodejs, который обновляет запись DNS на основе моего текущего IP. Скрипт работает нормально, но у меня есть некоторые опасения по поводу того, как его запустить. Проверка моего IP должна выполняться каждые 5 минут, и я столкнулся с дилеммой.

Стоит ли использовать Node's setInterval или я должен создать задание cron? Что будет потреблять меньше всего ОЗУ и ЦП? Имейте в виду, что скрипт работает на Raspberry Pi Zero с оперативной памятью 512 МБ и только 1 ядром.

Я знаю что cron кажется лучшим вариантом, но насколько он лучше? Имеет ли это значение с учетом моих характеристик?

Преимущества решения cron

  • меньшее потребление памяти в 90% случаев
  • утечки памяти эффективно устранены
  • код каждый раз перезагружает все библиотеки, поэтому обновления вступают в силу при следующем запуске без дополнительных сложностей

Преимущества демонического решения

  • время загрузки происходит только один раз, поэтому дисковый ввод-вывод и ЦП будут ниже для последующих запусков, поскольку вы не будете анализировать исходный код или загружать все библиотеки
  • более низкий уровень ввода-вывода ЦП и диска для последующих запусков также означает, что есть больше этих ресурсов, доступных для любого вашего основного приложения для Raspberry.
  • Linux должен выгружать память, которую вы не используете. Однако это может быть очень медленным в зависимости от вашего хранилища.

Вывод

Я согласен с Александром Т, что cron кажется, будет лучше, но если ваше основное приложение чувствительно к фоновым процессам, может быть лучше использовать демон.

Мое мнение, cron лучше. Я думаю, что лучше запускать сценарий каждые 5 минут, чем запускать сценарий, который запускается каждые 5 минут. Например, если ваш сценарий умирает, что вы будете делать? С cron он просто запустится в следующий раз через 5 минут.

Итак, для памяти и процессора. Я не знаю, как node.js тратит память прямо сейчас, но раньше была проблема с утечкой памяти, и при длительной работе процесса могла возникнуть проблема. По загрузке процессора, думаю, разницы нет.