NodeJS:承诺/等待会加快我的代码速度吗?

时间:2019-04-19 14:25:58

标签: node.js promise async-await

对于我的工作,我正在开发NodeJS应用程序。其功能之一是允许用户上载图像,将其与服务器上存储的一组图像进行匹配,并返回最佳匹配。为了进行匹配,我使用了opencv4nodejs库。但是,匹配算法非常复杂,因此速度较慢。此外,我的搜索空间中有数百个屏幕可以匹配。

现在,我的代码的行为如下(伪代码):

async match(a: Buffer, b: Buffer): Promise<boolean> {
  // some lengthy calculation..
  return true/false;
}

async findMatches(image: Buffer): Promise<Buffer[]> {
  const ret = [];
  for (const item of this.imagesList) {
    const matches = await this.match(item, image);
    if (matches) ret.push(item);
  }
  return ret;
}

如果我要将以上内容更改为以下内容:

async findMatches(image: Buffer): Promise<Buffer[]> {
  const ret = [];
  const promises = this.imagesList.map(it => {
    return this.match(item, image).then(matches => {
      if (matches) ret.push(item);
    });
  });
  await Promises.all(promises);
  return ret;
}

这样可以加快我的代码速度吗?我已经在上面编写了伪代码,因为实际的代码库很大并且分布在许多文件中。这也是我尚未进行更改并亲自测试其优缺点的原因。因此,我想请您提供专家意见。

我的直觉是,它不应导致任何可衡量的速度提高。我相信这是因为NodeJS是单线程应用程序。如果match函数执行耗时的顺序任务,则与之前顺序运行每个match一样,并行运行任意数量的match仍会花费相同的时间。 / p>

我的理解正确吗?

谢谢, 阿西姆

0 个答案:

没有答案