写入TXT文件的快速方法?

问题描述 投票:3回答:2

我制作了两个代码来制作文件并写入其中。问题是两者都很慢(基于磁盘速度)有没有更好的写入文件的方法?

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

javascript node.js fs
2个回答
0
投票

我认为您应该在文本中一次写入数据。因此,您不必在每次迭代时都执行此操作,而是在循环之后执行。这样,您可以减少函数调用的次数


0
投票

缓冲区

您可以创建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%]。

© www.soinside.com 2019 - 2024. All rights reserved.