Я работаю над сценарием, который берет список имен и для каждого загружает 3 изображения из URL. Чтобы взять каждое имя из массива, который я использую Promise.all, проблем пока нет. Но я хочу загрузить 3 изображения для игрока параллельно, чтобы сделать это быстрее, потому что мне нужно сделать это как можно быстрее. Таким образом, я вижу, что, если я загружаю только 1 изображение, потребуется ~ 2 минуты до go через все имена. Но если я добавлю еще 2 изображения для загрузки для игрока, я получу> 8 минут до go через все имена. Бот это нелогично, нет? Если я делаю 3 параллельных скачивания, то это должно иметь то же время, что и 1 загрузка (+/-). Что я делаю или считаю неправильным? Вот мой код, для параллельной загрузки я использую библиотеку Pqueue, для загрузки изображений image-downloader npm lib
const {default: PQueue} = require('p-queue');
const queue = new PQueue({concurrency: 10});
const download = require('image-downloader');
const fs = require('fs');
const playersListDataUpdate = async function(playersList, serverId, currentTimeStamp){
let values = [];
let placeholders = '';
await Promise.all(playersList.map(async (name) => {
values.push(name, currentTimeStamp, serverId);
placeholders += ' (?, ?, ?),';
//Update skins of user
if (!fs.existsSync('../uploads/players/'+name)) {
fs.mkdirSync('../uploads/players/'+name);
}
await queue.addAll([
async () => {
//Head
try {
await download.image({
url: 'https://minotar.net/avatar/'+name,
dest: '../uploads/players/' + name + '/face_' + name + '.png'
});
console.log('Saved skinhead of '+name);
} catch (e) {
console.log('Failed to save head of '+name);
}
},
async () => {
//Preview
try {
await download.image({
url: 'https://minotar.net/armor/body/'+name,
dest: '../uploads/players/' + name + '/skin_preview_' + name + '.png'
});
console.log('Saved skinpreview of '+name);
} catch (e) {
console.log('Failed to save skin preview of '+name);
}
},
async () => {
//Skin
try {
await download.image({
url: 'https://minotar.net/skin/'+name,
dest: '../uploads/players/' + name + '/skin_download_' + name + '.png'
});
console.log('Saved skindownload of '+name);
} catch (e) {
console.log('Failed to save skin of '+name);
}
},
]);
}));
return {
'values': values,
'placeholders': placeholders.slice(0, -1)
};
}