如果我需要使用Promise(Bluebird)的多个文件中的fs,我应该每次调用Promise.promisifyAll(require('fs'))吗? 或者使用带
的小模块会更好module.exports = Promise.promisifyAll(require('fs'))
并且只导入该模块?
如果我做对了,我的第一个选择是每次都会满足fs模块,而第二个只会链接到同一个模块,这只是一次令人满意。或者像我的第二个一样,是我的第一选择吗?
编辑: 我测试了两个选项:
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
所以我的理论是正确的,第二个更快
答案 0 :(得分:1)
在您的第一个解决方案中,每次需要时都会生成一个promisify版本的fs。但是在你的第二个解决方案中,promisify只会发生一次,当模块加载到内存中时,每次你使用它时,你只会指向同一个对象。
// file fs-promise.js
module.exports = Promise.promisifyAll(require('fs'));
// other file
const fsp = require('./fs-promise.js');
两种解决方案都有效,我认为你应该评估使用其中一种的性能。