Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/422.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 快速写入TXT文件的方法?_Javascript_Node.js_Fs - Fatal编程技术网

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我的错,忘了写偏移量。我现在已经修好了。