首页 > 解决方案 > 快速写入 TXT 文件的方法?

问题描述

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

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 中。谢谢!~纳德沃杭

标签: javascriptnode.jsfs

解决方案


缓冲

您可以创建然后加入的字符串数组,而不是创建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.012 毫秒,而不是之前的 1907.401 毫秒,减少了50%


推荐阅读