У меня есть скрипт, который является частью большой программы Electron. Это скрипт al oop, который читает файлы из временного каталога приложения, а затем загружает все файлы на S3. Это работает хорошо для небольших наборов файлов, но для больших, это заставляет компьютер зависать и перезагружаться с системой cra sh (Macbook pro 2018). Большой набор, с которым я тестировал, состоял примерно из 600 файлов (каждый файл маленький, размером менее 1 МБ).
Я не могу получить какую-либо ошибку от самого скрипта, поэтому его немного сложно отладить. Я могу предположить, что это может быть связано либо со многими 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;
}
};