Я только что узнал о закрытии в JS и взволнован, чтобы попробовать его в моем проекте.
Я написал следующий код для проверки времени на предмет истечения срока действия кэша.
module.exports = {
needUpdateCache: function () {
let start = -1;
const timeoutMs = rDefines["10_MINUTES_MS"];
return function () {
if (start === -1) {
start = Date.now();
return true;
}
let diff = Date.now() - start;
if (diff < timeoutMs) {
return false
} else {
start = Date.now();
return true;
}
}
}(),
Тогда в главном контроллере маршрутов, он у меня называется так
exports.getData = function (req, res, next) {
if (!common.needUpdateCache()) {
console.log('Still in caching period. Retrieve from saved local file');
common.csvFile2jsonArray("data.txt").then((jsonObj) => {
res.json({"songs": jsonObj});
});
return;
}
else // get new data from db and save it to local file data.txt
Причина, по которой я думаю, что замыкание в моем коде является причиной, заключается в том, что сравнение heapdump показывает множество замыканий, созданных не собранными, что приводит к тому, что pm2 показывает увеличение использования памяти. Вот снимок heapdump
Я провел исследование по закрытию и утечке памяти, но не понял, почему мой код создает утечку. Я исправил это, удалив использование закрытия. Однако мне действительно любопытно, почему я получаю утечку памяти с моим кодом. Если у вас есть какие-либо подсказки, пожалуйста, помогите указать это, чтобы я мог следить за этим в будущем. Любая помощь приветствуется.