【发布时间】:2020-04-28 06:34:58
【问题描述】:
我无法分享我的确切代码 - 但我已尝试在下面说明我的情况:
远程 API 有一个请求最大值。限制为 10 个请求/每秒。我想加快我的代码接近这个限制。目前该代码每秒运行 1-2 个请求。
示例 - 为 100 个不同的人获取 10 小时的数据:
(async function get(...) {
await getPersonData(for one person);
if (not all persons' data has been fetched) { get(fetch data for the next person); }
})(...);
async function getPersonData() {
const personData = await getHistoricalData(...);
...
};
async function getHistoricalData(...) {
// Fetch 10 hours of data ...
while (as long as all data has not yet been fetch...) {
const data = await getOneHourOfData(...);
...
}
return all_20_hours_of_data;
}
async function getOneHourOfData(...) {
return await remote.api.getData(get 1 hour of data);
}
上面的示例是我的代码的标准版本 - 我也尝试了两种不同的方法:
- 使用 Promise.all() 并同时获取 5 个人的数据
- 复制/粘贴并同时运行多个版本的 get() 函数(前 4 行代码块)
这两种方法都有效 - 但它们似乎都没有加速任何东西......?? 我知道是 while 循环阻塞/减慢了整个过程?
【问题讨论】:
-
您所说的您尝试过的两件事都应该有效,这表明实施这些想法时存在问题。我们无法为您提供我们看不到的代码。 :-) 请向我们展示您尝试用于这些的代码。请发布真实代码,而不是伪代码,最好通过Stack Snippets 运行。当然,它不一定是您的真实代码,您可能希望用
setTimeout模拟remote.api.getData,但将其设为真实代码可以消除歧义并帮助我们为您提供帮助。 -
我完全理解。但由于我设法使所有代码示例都能正常工作——但它们并没有加快整个过程......然后我认为一个 psydo-code/concept 可以做到这一点。但是好吧 - 如果我在上面的例子中没有犯任何明显的错误,我会尝试提出更具体的东西:)
-
如果我们看到真实的代码,我们总是可以提供更好的答案,而且对您的主要好处是我们甚至可以提供您甚至没有想过要求的建议/改进。出于某种未知的原因,在这里发帖的人认为他们应该用伪代码提出一个通用问题——这对你来说几乎不是最好的选择。请始终显示相关的真实代码,我们可以更准确地为您提供帮助,并提供您可以使用的实际代码,并且可以以您甚至不知道要问的方式为您提供帮助。
标签: javascript node.js performance parallel-processing async-await