В чем разница между Async.queue и Promise.map? - PullRequest
0 голосов
/ 05 января 2019

Я попытался провести стресс-тестирование моего API в ExpressJS и для обработки нескольких запросов я использовал Promise.all, а затем Async.queue с параметром параллелизма.

  1. Promise:

    export const myapi = async (args1, args2) => {
    console.log('args:', args1, args2);
    
    let testing_queue = [];
    testing_queue.push(new Promise(async (resolve, reject) => {
            let result = await doAComplexQuery(args1, args2); // SELECT... JOIN...
            if (!result || result.length <= 0)
                reject(new Error('Cannot find anything!'));
            resolve(result);
        }
    ));
    return await Bluebird.map(testing_queue, async item => {
        return item;
    }, {concurrency: 4});    };
    
  2. Async.queue: (https://www.npmjs.com/package/async)

    export const myapi = async (args1, args2) => {
    console.log('args:', args1, args2);
    
    let testing_queue = Async.queue(function (task, callback) {
        console.log('task', task);
        callback();
    }, 4);
    testing_queue.push(async function () {
            let result = await doAComplexQuery(args1, args2); // SELECT... JOIN...
            if (!result || result.length <= 0)
                throw new Error('Cannot find anything!');
            return result;
        }
    );};
    

И попробуйте сделать запрос как можно больше:

const response = async function () {
    return await Axios.post('http://localhost:3000/my-api', {
        "args1": "0a0759eb",
        "args2": "b9142db8"
    }, {}
    ).then(result => {
        return result.data;
    }).catch(error => {
        console.log(error.message);
    });
};

for (var i = 0; i < 10000; i++) {
    response();
}

И беги. Способ # 1 возвращает много ответов ResourceTimeout или Socket. Между тем, # 2 возвращает успешный ответ на все запросы и работает еще быстрее.

Так в этом случае Async.queue лучше?

1 Ответ

0 голосов
/ 08 января 2019

Я думаю, что это может помочь скорости, если вы увеличите лимит параллелизма в своем файле обещаний.map.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...