javascript - 快速写入 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 中。谢谢!~纳德沃杭
解决方案
缓冲
您可以创建然后加入的字符串数组,而不是创建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%。
推荐阅读
- xml - 通过使用带有 libxml 版本 20706 的 xmlstarlet 或 xmllint 获取值
- r - 如何从某个列获取矩阵列输出
- swift - SwiftUI - 如何使用列表单元格内的异步操作更改同步值
- python-3.x - 正则表达式以一系列字符串捕获 IP 地址 + /subnet 格式并将每个匹配项分配给一个组
- google-app-engine - GAE 部署错误:“无法写入多个包”
- python - Python的X长度二进制
- python - 熊猫数据框中的argparse Typeerror,执行不正确
- google-kubernetes-engine - GKE 什么时候不再支持 k8s 版本?
- kotlin - kotlin 接口伴随对象函数上的@JvmOverloads 错误
- android - 关于 Android EMM 的权限