Быстрый способ записи в файл TXT? - PullRequest
3 голосов
/ 22 января 2020

Я сделал два Кода, чтобы сделать файл и написать в нем. Проблема в том, что они медленные (в зависимости от скорости диска). Есть ли лучший способ записи в файл?

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 секунд. Я ищу более быстрый метод, который может сделать это за> 5se c или мгновенно. Файл сохраняется в текстовом формате. Спасибо! ~ Nadelvorhang

Ответы [ 2 ]

2 голосов
/ 22 января 2020

Буфер

Вместо создания массива строк, к которым вы затем присоединяетесь, вы можете создать 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% меньше .

1 голос
/ 22 января 2020

Я думаю, вы должны написать данные в тексте один раз, если можете. Таким образом, вы делаете это не на каждой итерации, а после l oop. Таким образом, вы делаете меньше вызовов функций

...