我刚刚了解了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的快照
我已经完成了关于关闭和内存泄漏的研究,但是没有任何线索为什么我的代码会造成泄漏。我通过删除闭包的使用来解决它。但是,我真的很好奇为什么我的代码会发生内存泄漏。如果您有任何线索,请帮忙指出,以便将来我能注意。任何帮助表示赞赏。
答案 0 :(得分:0)
我终于通过删除提到的闭包部分消除了应用程序中的内存泄漏问题。之后似乎可以解决内存泄漏。 但是随后我还必须删除可快速格式化的中间件,这有时会导致应用程序挂起。 现在我的应用程序运行无泄漏 感谢Bergi对您的评论,不胜感激。