异步任务调度优化策略

Bella450 +0/-0 0 0 正常 2025-12-24T07:01:19 JavaScript · Promise

在现代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进行错误处理
推广
广告位招租

讨论

0/2000