在现代JavaScript开发中,异步任务调度优化是提升应用性能的关键环节。本文将通过实际代码对比,展示不同调度策略的效果差异。
问题场景
假设我们需要处理10个API请求,每个请求耗时100ms。如果不做任何优化,串行执行会耗时1秒;而合理调度可以显著提升效率。
策略对比
1. 串行执行(低效)
async function serialExecution() {
const results = [];
for (let i = 0; i < 10; i++) {
const result = await fetch(`/api/data/${i}`);
results.push(await result.json());
}
return results;
}
2. 并发执行(高效)
async function concurrentExecution() {
const promises = [];
for (let i = 0; i < 10; i++) {
promises.push(fetch(`/api/data/${i}`).then(res => res.json()));
}
return Promise.all(promises);
}
3. 限流执行(平衡型)
async function limitedExecution(limit = 3) {
const results = [];
const tasks = [];
for (let i = 0; i < 10; i++) {
tasks.push(async () => {
const result = await fetch(`/api/data/${i}`);
return await result.json();
});
}
// 控制并发数
for (let i = 0; i < tasks.length; i += limit) {
const batch = tasks.slice(i, i + limit);
const batchResults = await Promise.all(batch.map(task => task()));
results.push(...batchResults);
}
return results;
}
性能测试
通过console.time测量执行时间,串行执行耗时1000ms+,并发执行约100ms,限流执行在两者之间。
实际应用建议
- 数据独立且无依赖:使用并发执行
- 防止请求过多导致服务器压力:使用限流调度
- 复杂业务逻辑:结合Promise.allSettled进行错误处理

讨论