簡體   English   中英

快速寫入 TXT 文件的方法?

[英]Fast method to write in a TXT file?

我制作了兩個腳本來制作文件並寫入其中。 問題是兩者都很慢(基於磁盤速度)是否有更好的方法來寫入文件?

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 script */
let stream = fs.createWriteStream(`./codes/${makeid(5)}.txt`);
for (let i = 0; 1000000 > i; i++)
{
   stream.write(`${makeid(20)}`);
}
stream.end();

兩個代碼都需要 5-15 秒。 我正在尋找一種更快的方法來使其在 < 5 秒內完成。 該文件保存在 txt 中。 謝謝

緩沖

您可以創建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%

如果可以的話,我認為你應該在你的文本中寫一次數據。 所以你不是在每次迭代時都這樣做,而是在循環之后。 這樣你就可以減少 function 調用

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM