对于我的工作,我正在开发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>
我的理解正确吗?
谢谢, 阿西姆