我制作了两个代码来制作文件并写入其中。问题是两者都很慢(基于磁盘速度)有没有更好的写入文件的方法?
let codes = [];
function makeid(length) {
var result = '';
var characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
var charactersLength = characters.length;
for ( var i = 0; i < length; i++ ) {
result += characters.charAt(Math.floor(Math.random() * charactersLength));
}
return result;
};
for (let i = 0; 1000000 > i; i++)
{
codes.push(`${makeid(20)}`);
}
fs.writeFile(`./codes/${makeid(5)}.txt`, codes.join('\n'), (err) => {
if (err)
{
message.reply("There was an error processing your request");
throw err;
}
})
/* Second Code */
let stream = fs.createWriteStream(`./codes/${makeid(5)}.txt`);
for (let i = 0; 1000000 > i; i++)
{
stream.write(`${makeid(20)}`);
}
stream.end();
/* Made by Nadelvorhang */
两个代码都需要5到15秒。我正在搜索一个更快的方法,它可能会在> 5秒或瞬间完成。文件保存在txt中。谢谢! 〜Nadelvorhang
我认为您应该在文本中一次写入数据。因此,您不必在每次迭代时都执行此操作,而是在循环之后执行。这样,您可以减少函数调用的次数
您可以创建Buffer
,而不是创建随后要连接的字符串数组。由于Node.js不会进行任何转换,而只是将缓冲区中的字节写入磁盘,因此速度更快。
// improved first method
const codes = Buffer.allocUnsafe(1000000 * 20);
for (let i = 0; 1000000 > i; i++) {
codes.write(`${makeid(20)}`);
}
fs.writeFileSync(`./${makeid(5)}.txt`, codes);
在我的机器上,它花费了970.012ms而不是之前的1907.401ms,这之前是减少50%]。