Как сбросить все переменные в памяти, используя Nodejs
Может быть, мой вопрос не совсем правильный, но в основном мне нужно знать самый простой способ сброса всех моих переменных в приложении js моего узла с помощью узла cron пакета npm ( https://www.npmjs.com/package/node-cron).
Тем не менее, я думаю, что это происходит только с моими массивами.
Пакет работает отлично... Моя функция работает с запланированным интервалом, но при каждом запуске она не освобождает переменные предыдущих запланированных задач из памяти. По сути, кажется, что я добавляю каждую итерацию в последнюю.
Что является лучшим способом освобождения всего из памяти, чтобы не сохранять старые данные при каждом запуске задачи.
Пример:(запускать функцию каждую минуту)
var cron = require('node-cron');
cron.schedule('* * * * *', function(){
myFunction();
});
Как упоминалось выше, функция myFunction() запускается каждый раз через библиотеку node-cron. Однако переменные внутри этой функции, по-видимому, не освобождаются из памяти при каждом запуске запланированной задачи cron.
Есть идеи?
Спасибо!
2 ответа
Что является лучшим способом освобождения всего из памяти, чтобы не сохранять старые данные при каждом запуске задачи.
В Javascript нет такого соглашения или функции для освобождения всех переменных.
Если вы объявите переменные правильно в пределах функции или блока, то эти переменные будут существовать только до тех пор, пока эта область жива. Если вы не правильно объявите свои переменные с const
, let
или же var
тогда они могут стать случайными глобальными переменными и жить в течение всего приложения.
Сделай это так:
function myFunction() {
// declare variables to be local to your function
let x = 2;
// bunch of other code that uses x
}
Потом каждый раз myFunction()
будет запущена, будет новая версия x
это не имеет ничего общего с предыдущей версией x
а сборка мусора Javascript очистит старые версии, которые больше не используются.
Если вам нужна более конкретная помощь с вашим кодом, покажите нам код, который использует переменные, с которыми у вас возникают проблемы.
Если вы делаете это так:
function myFunction() {
// declare variables to be local to your function
x = 2;
// bunch of other code that uses x
}
Затем, x
становится случайной глобальной переменной и такой же x
переменная будет использоваться во всех вызовах myFunction()
, Это анти-паттерн в Javascript, и на самом деле, Javascript теперь имеет strict
режим, который даже делает это ошибкой из-за того, как это зло. Преднамеренные глобальные переменные должны быть явно объявлены как глобальные. Все остальные переменные должны быть преднамеренно объявлены в соответствующей функции или области видимости const
, let
или же var
,
Как сказал jfriend00, я, должно быть, использовал функцию с переменными, которые случайно стали глобальными. В итоге я переписал рефакторинг и смог решить, теперь сервис работает отлично. благодарю вас