From 2a4c512e49582e0dbd6a6785e34c5d5866114a4b Mon Sep 17 00:00:00 2001 From: kangfenmao Date: Sun, 30 Mar 2025 14:37:20 +0800 Subject: [PATCH] refactor(BackupManager): switch to stream-based file writing for improved performance * Updated BackupManager to use streams for writing data to temporary and backup files, enhancing efficiency and error handling. * Replaced synchronous file writing with asynchronous stream operations to prevent blocking the event loop. --- src/main/services/BackupManager.ts | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/src/main/services/BackupManager.ts b/src/main/services/BackupManager.ts index a775fddf..a97b37e6 100644 --- a/src/main/services/BackupManager.ts +++ b/src/main/services/BackupManager.ts @@ -87,9 +87,16 @@ class BackupManager { await fs.ensureDir(this.tempDir) onProgress({ stage: 'preparing', progress: 0, total: 100 }) - // 将 data 写入临时文件 + // 使用流的方式写入 data.json const tempDataPath = path.join(this.tempDir, 'data.json') - await fs.writeFile(tempDataPath, data) + await new Promise((resolve, reject) => { + const writeStream = fs.createWriteStream(tempDataPath) + writeStream.write(data) + writeStream.end() + + writeStream.on('finish', () => resolve()) + writeStream.on('error', (error) => reject(error)) + }) onProgress({ stage: 'writing_data', progress: 20, total: 100 }) // 复制 Data 目录到临时目录 @@ -208,8 +215,15 @@ class BackupManager { fs.mkdirSync(this.backupDir, { recursive: true }) } - // sync为同步写,无须await - fs.writeFileSync(backupedFilePath, retrievedFile as Buffer) + // 使用流的方式写入文件 + await new Promise((resolve, reject) => { + const writeStream = fs.createWriteStream(backupedFilePath) + writeStream.write(retrievedFile as Buffer) + writeStream.end() + + writeStream.on('finish', () => resolve()) + writeStream.on('error', (error) => reject(error)) + }) return await this.restore(_, backupedFilePath) } catch (error: any) {