Node.js 上载大量文件时,节点脚本会导致系统冻结
我有一个脚本,它是一个更大的电子程序的一部分。该脚本是一个循环,它从应用程序的临时目录中读取文件,然后将所有文件上载到S3。这对于较小的文件集很有效,但对于较大的文件集,它会导致计算机冻结并在系统崩溃时重新启动(Macbook pro 2018)。我测试过的一个大文件集包含大约600个文件(每个文件都很小,小于1MB) 我无法从脚本本身获得任何错误,因此调试有点困难。我可以猜测,这必须是对多个Node.js 上载大量文件时,节点脚本会导致系统冻结,node.js,electron,fs,Node.js,Electron,Fs,我有一个脚本,它是一个更大的电子程序的一部分。该脚本是一个循环,它从应用程序的临时目录中读取文件,然后将所有文件上载到S3。这对于较小的文件集很有效,但对于较大的文件集,它会导致计算机冻结并在系统崩溃时重新启动(Macbook pro 2018)。我测试过的一个大文件集包含大约600个文件(每个文件都很小,小于1MB) 我无法从脚本本身获得任何错误,因此调试有点困难。我可以猜测,这必须是对多个fs.lstatSync或对多个put同时激活 我想要一些关于如何调试这个的建议(很难,因为计算机冻结了
fs.lstatSync
或对多个put
同时激活
我想要一些关于如何调试这个的建议(很难,因为计算机冻结了),或者关于有多少打开的fs.lstatSync
和put
是稳定的
const upload = (): void => {
const fileUploadPromises = [];
const userDataPath = remote.app.getPath('temp');
let i = 0;
let bytes = 0;
let totalBytes = 0;
let lastUpdate = 0;
for (const file of filenames) {
const filePath = `${userDataPath}chunks/${file}.ts`;
const stats = fs.lstatSync(filePath);
const { size } = stats;
const createdFile = createFileData.createFile[i];
totalBytes = totalBytes + size;
fileUploadPromises.push(
put({
url: createdFile.presignedPutUrl,
body: fs
.createReadStream(filePath)
.on('data', c => {
bytes += c.length;
const stepSize = totalBytes / 100;
if (bytes - lastUpdate > stepSize) {
setProgress(bytes / totalBytes);
lastUpdate = bytes;
}
})
.on('error', e => {
console.error(e); // eslint-disable-line
}),
headers: {
'Content-length': size,
}
}).catch(e => {
console.error(e); // eslint-disable-line
})
);
i = i + 1;
}
};
我也有同样的问题,但文件上传成功,但在最后一块系统挂起,有什么解决方案吗