如果我需要使用 Promise (Bluebird) 在多个文件中使用 fs,我应该每次都调用 Promise.promisifyAll(require('fs')) 吗? 或者使用一个小模块会更好
module.exports = Promise.promisifyAll(require('fs'))
并且只导入该模块?
如果我做对了,我的第一个选择将每次都 promise fs 模块,而第二个选择将仅链接到同一个模块,该模块仅 promise 一次。或者我的第一选择会像我的第二选择一样吗?
编辑: 我测试了这两个选项:
const Promise = require('bluebird')
let time1start = Date.now()
for(let i = 0; i <= 1000;i++){
let fs = Promise.promisifyAll(require('fs'))
}
console.log('Time gone 1 Test: ' + (Date.now() - time1start))
let time2start = Date.now()
for(let i = 0; i <= 1000;i++){
let fs = require('./testInc')
}
console.log('Time gone 2 Test: ' + (Date.now() - time2start))
testinc.js:
module.exports = require('bluebird').promisifyAll(require('fs'))
结果是: 时光逝去 1 测试:891 时间过去了 2 测试:10
所以我的理论是正确的,第二个更快
最佳答案
在您的第一个解决方案中,每次需要时都会生成 fs 的 promisify 版本。但在你的第二个解决方案中,promisify只会发生一次,当模块加载到内存中时,然后每次你使用它时,你只会指向同一个对象。
// file fs-promise.js
module.exports = Promise.promisifyAll(require('fs'));
// other file
const fsp = require('./fs-promise.js');
两种解决方案都可以工作,我认为您应该评估使用其中一种的性能。
关于javascript - 我是否需要在每个模块文件中使用 Promise.promisifyAll() ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44479258/