如何解决这种关闭是否会导致Node.js中的内存泄漏,还是编程不好?
这不是will-this-closure-cause-a-memory-leak的重复项,因为它是ios / swift,并且是javascript / nodejs
现在,我打算仅将其用于调试,并继续从任何地方(如mocha / test等)进行调用。因此,它会立即将格式正确的调试信息/(复杂的json对象)记录到测试文件夹中,而不是服务器控制台中。 / p>
仍然好奇地理解含义,因为对于该函数的每次调用都会依次调用require('winston')
,我不确定这是一个好习惯,其次我想确保内存泄漏。
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'})]
})
})()
解决方法
我不确定您认为代码的哪一部分会导致内存泄漏。
定期致电是没有问题的
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'})]
});
只是因为它更容易理解。
根本不清楚为什么要使用额外的函数包装器。 const winston
仅在此模块中是本地的,因此没有真正的理由试图将其隐藏在IIFE和IMO中,即包装器只会使代码更加混乱,以至于无法立即查看其操作。
仍然好奇地理解含义,因为对于该函数的每次调用都会依次调用require('winston'),我不确定这是一个好习惯,其次我想确保内存泄漏。
每次致电debugLog()
都不会再呼叫require('winston')
。 debugLog
被分配了winston.createLogger()
的结果,所以这就是您反复调用的内容,而不是您创建的外部包装函数。该包装函数仅在启动时执行一次。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。