繁体   English   中英

此关闭是否会导致 Node.js 中的 memory 泄漏,还是编程错误?

[英]Does this closure cause a memory leak in Node.js or Is it a bad programming?

这不是will-this-closure-cause-a-memory-leak的副本,因为那是 ios/swift 而这是 javascript/nodejs

现在我打算只将它用于调试,并继续从 mocha/test 等任何地方调用。所以它会立即将格式正确的调试信息/(复杂的 json 对象)记录到测试文件夹而不是服务器控制台。

仍然很好奇理解含义,因为每次调用此类 function 都会依次调用require('winston') ,我不确定这是一个好习惯,其次我想确保 memory 泄漏。

exports.debugLog = (() => {
    const winston = require('winston');
    return winston.createLogger({
        level: 'info',
        format: winston.format.json(),
        defaultMeta: {service: 'debug-service'},
        transports: [new winston.transports.File({filename: 'debug.log'})]
    })
})()

我不确定您认为代码的哪一部分会导致 memory 泄漏。

定期调用不是问题:

const winston = require('winston');

模块被缓存,因此在第一次加载模块后,对同一模块的后续调用require()会立即返回缓存的导出。 它很快而且根本不是问题。 在您的具体情况下,我可能会这样写:

const winston = require('winston');

exports.debugLog = winston.createLogger({
        level: 'info',
        format: winston.format.json(),
        defaultMeta: {service: 'debug-service'},
        transports: [new winston.transports.File({filename: 'debug.log'})]
});

只是因为它更容易理解。

完全不清楚为什么要使用额外的 function 包装器。 const winston仅对该模块是本地的,因此没有真正的理由尝试将其隐藏在 IIFE 和 IMO 中,该包装器只会使代码更加混乱,以便立即了解它在做什么。

仍然很好奇理解含义,因为每次调用此类 function 都会依次调用 require('winston') ,我不确定这是一个好的做法,其次我想确保 memory 泄漏。

每次调用debugLog()都不会再次调用require('winston') debugLog被分配了winston.createLogger()的结果,所以这就是您反复调用的结果,而不是您创建的外包装 function。 该包装器 function 仅在启动时执行一次。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM