gpt4 book ai didi

javascript - 如何在 NodeJS 中读取大文件(Excel)而不暂停 UI

转载 作者:行者123 更新时间:2023-12-02 23:07:23 25 4
gpt4 key购买 nike

我目前正在使用ExcelJS将大型 Excel 文件(10,000 多行)读取到 NodeJS/Angular/Electron 应用程序中。它可以很好地读取较小的文件,但读取较大的文件需要 3.9 到 5 秒的时间,并且在此期间,CSS 根本不会更新。

我目前正在使用 async/await 来加载文件,因为我认为这将允许在等待文件加载时发生其他操作,因为我认为 Node 中的 I/O 操作有自己的线程。我还了解到 CPU 密集型任务会阻塞所有其他 Node 进程。

这是当前加载工作簿的代码:

async openWorkbook(filename: string) {
this.loading = true;
const workbook = new Workbook();
const promise = workbook.xlsx.readFile(this.path + '/sheets/' + filename)
.then(() => {
// use workbook
workbook.getWorksheet(1).name = workbook.getWorksheet(1).name.slice(0, 31);
const excelFile: ExcelFile = { workbook: workbook, filename: filename };
this.wbSource.next(excelFile);
});

const read = await promise;
}

此代码的工作方式与回调实现相同,它们都会阻止应用程序的 CSS。我如何在不阻塞 UI 的情况下读取文件(或执行任何 CPU 密集型任务)?

最佳答案

在这种情况下,我要做的第一件事是通过根本不“打开”大文件来防止内存开销。

所以像这样的东西应该有效:

const stream = fs.createReadStream(filePath);
const workbook = new Excel.Workbook();
stream.pipe(workbook.xlsx.createInputStream());

以及那些chunks阻塞循环一小段时间,即使在 javascript 事件循环中也可以使用它;)

关于javascript - 如何在 NodeJS 中读取大文件(Excel)而不暂停 UI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57527356/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com