ExpressJS内存泄漏是由于使用闭包引起的?

时间:2018-11-12 09:41:05

标签: javascript memory-leaks closures

我刚刚了解了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的快照

enter image description here

我已经完成了关于关闭和内存泄漏的研究,但是没有任何线索为什么我的代码会造成泄漏。我通过删除闭包的使用来解决它。但是,我真的很好奇为什么我的代码会发生内存泄漏。如果您有任何线索,请帮忙指出,以便将来我能注意。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:0)

我终于通过删除提到的闭包部分消除了应用程序中的内存泄漏问题。之后似乎可以解决内存泄漏。 但是随后我还必须删除可快速格式化的中间件,这有时会导致应用程序挂起。 现在我的应用程序运行无泄漏 感谢Bergi对您的评论,不胜感激。