Promise.all () медленнее, чем использование await для каждого обещания? - PullRequest
4 голосов
/ 05 апреля 2019

Я провожу тестирование производительности и смотрю на Promise.all () в node / js. Однако после тестирования это на самом деле медленнее, чем использование await для трех обещаний, которые я хочу выполнить. Я просто возвращаю некоторые данные из базы данных mongodb.

Я что-то не так делаю или это просто из-за того, как работает цикл обработки событий?

Promise.all (): 234,820 мс

  // Init db connection
  const db = client.db('docker-client1');
  const productsCollection = db.collection('ICProductData');
  const rulesCollection = db.collection('SPRuleData');
  const customersCollection = db.collection('ARCustomerData');
  // Main function

  const CustomerCode = 'FINE';
  const ProductCode = 'BEDCABINET';

  let customers = customersCollection
    .find({ _id: CustomerCode })
    .project({ PriceCode: 1, BillToAccountCode: 1 })
    .toArray();

  let products = productsCollection
    .find({ _id: ProductCode })
    .project({ 'Price.PriceCode': 1, 'Price.SellingPrice': 1 })
    .toArray();

  let rules = rulesCollection
    .find({
      $and: [
        {
          $or: [
            {
              $and: [
                { What1Code: ProductCode, What1Type: 'Product' },
                { Who1Code: CustomerCode, Who1Type: 'Customer' }
              ]
            }
          ]
        }
      ]
    })
    .toArray();

  const results = await Promise.all([customers, products, rules]);
  console.timeEnd();

Просто с помощью await: 127,239 мс

  // Init db connection
  const db = client.db('docker-client1');
  const productsCollection = db.collection('ICProductData');
  const rulesCollection = db.collection('SPRuleData');
  const customersCollection = db.collection('ARCustomerData');
  // Main function

  const CustomerCode = 'FINE';
  const ProductCode = 'BEDCABINET';

  const custReq = await customersCollection
    .find({ _id: CustomerCode })
    .project({ PriceCode: 1, BillToAccountCode: 1 })
    .toArray();
  const prodReq = await productsCollection
    .find({ _id: ProductCode })
    .project({ 'Price.PriceCode': 1, 'Price.SellingPrice': 1 })
    .toArray();

  let rulesReq = await rulesCollection
    .find({
      $and: [
        {
          $or: [
            {
              $and: [
                { What1Code: ProductCode, What1Type: 'Product' },
                { Who1Code: CustomerCode, Who1Type: 'Customer' }
              ]
            }
          ]
        }
      ]
    })
    .toArray();

  console.timeEnd();
...