优化思路
- 使用可写流(
fs.createWriteStream
):fs.writeFile
是一个阻塞式的操作,写入大量数据时会影响性能。而可写流是基于事件驱动的,以流的方式处理数据,能提高效率。
- 批量写入:将数据分批处理,减少文件系统I/O操作的频率。
- 错误处理:在写入过程中正确处理可能出现的错误,避免程序异常退出。
- 合理设置缓冲区大小:可写流有默认的缓冲区大小,根据实际情况调整缓冲区大小,以优化性能。
关键代码示例
const fs = require('fs');
const path = require('path');
// 要写入的数据数组
const dataArray = ['data1', 'data2', 'data3', 'data4', 'data5'];
// 目标文件路径数组
const filePaths = [
path.join(__dirname, 'file1.txt'),
path.join(__dirname, 'file2.txt'),
path.join(__dirname, 'file3.txt')
];
// 批量写入函数
function batchWriteToFiles(dataArray, filePaths) {
const batchSize = 10; // 每次写入的数据量
for (let i = 0; i < filePaths.length; i++) {
const writeStream = fs.createWriteStream(filePaths[i]);
let currentIndex = 0;
function writeNextBatch() {
const endIndex = currentIndex + batchSize;
const batch = dataArray.slice(currentIndex, endIndex);
batch.forEach(data => {
writeStream.write(data + '\n');
});
currentIndex = endIndex;
if (currentIndex < dataArray.length) {
// 如果还有数据,继续写入下一批
process.nextTick(writeNextBatch);
} else {
writeStream.end();
}
}
writeNextBatch();
writeStream.on('error', (err) => {
console.error(`写入文件 ${filePaths[i]} 时出错:`, err);
});
}
}
batchWriteToFiles(dataArray, filePaths);