Javascript 快速写入TXT文件的方法?
我制作了两个代码来创建一个文件并写入其中。 问题是两者都很慢(基于磁盘速度) 有更好的方法写入文件吗Javascript 快速写入TXT文件的方法?,javascript,node.js,fs,Javascript,Node.js,Fs,我制作了两个代码来创建一个文件并写入其中。 问题是两者都很慢(基于磁盘速度) 有更好的方法写入文件吗 let codes = []; function makeid(length) { var result = ''; var characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'; var charactersLength = character
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 */
let code=[];
函数makeid(长度){
var结果=“”;
变量字符='ABCDEFGHIJKLMNOPQRSTUVXYZABCDFGHIJKLMNOPQRSTUVXYZ0123456789';
var charactersLength=characters.length;
对于(变量i=0;ii;i++)
{
push(`${makeid(20)}`);
}
fs.writeFile(`./codes/${makeid(5)}.txt`,codes.join('\n'),(err)=>{
如果(错误)
{
message.reply(“处理您的请求时出错”);
犯错误;
}
})
/*第二代码*/
让stream=fs.createWriteStream(`./code/${makeid(5)}.txt`);
对于(设i=0;1000000>i;i++)
{
write(`${makeid(20)}`);
}
stream.end();
/*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)}`, i * 20, 20);
}
fs.writeFileSync(`./${makeid(5)}.txt`, codes);
在我的机器上,这需要970.012ms,而不是之前的1907.401ms,这比以前少了50%当您从编程语言写入时,有几层缓冲。I/O库中可能有缓冲,操作系统缓冲,磁盘控制器也可能有自己的缓冲。该库可能提供了禁用其缓冲的方法,但对较低级别的缓冲没有太多的控制。我尝试了该代码,它只生成了一个代码,然后生成了2000000个空代码lines@Nadelvorhang我的错,忘了写偏移量。我现在已经修好了。