You need to enable JavaScript to run this app. 如何降低调用千次Google Distance Matrix API的Node.js Express接口耗时
优惠活动
大模型
产品
解决方案
定价
更多

如何降低调用千次Google Distance Matrix API的Node.js Express接口耗时

接口耗时优化方案

1 优化Google Distance Matrix API调用逻辑

  • 用批量请求替换单次请求:Google Distance Matrix API本身支持单次请求传入多组起点+多组终点,单请求最多支持100个计算单元(计算单元数=起点数×终点数)。你当前场景只有1个用户起点、1000个人员终点,只需拆分10次请求就能完成全部计算,直接把请求次数从1000降到个位数,耗时可降低90%以上。
  • 可控并发替换串行调用:如果因为业务原因无法使用批量接口,也不要逐次串行调用1000次接口,用Promise.all做可控并发,根据Google API的限流阈值设置并发数(比如同时跑20个请求),耗时可直接降到串行调用的1/20左右,注意添加429限流重试逻辑即可。

2 新增缓存层减少重复API请求

  • 热点结果缓存:如果存在多用户查询相同坐标、或者人员坐标长期固定的场景,可以用Redis缓存距离计算结果,缓存键可设为distance:{start_lat},{start_lng}:{end_lat},{end_lng},过期时间根据业务对距离数据的时效性要求设置即可,热点请求可以直接命中缓存,无需调用外部API。
  • 预计算固定数据:如果1000个人员的坐标基本不会变动,可以提前预计算国内热门城市/常用区域坐标到这些人员的距离并存储,用户请求时优先匹配预计算结果,完全省去外部API调用耗时。

3 本地计算替换外部API调用

  • 低精度场景用本地球面距离计算:如果业务不需要道路级的导航距离,只需要大致的直线距离,可直接在本地用haversine公式计算,1000次计算耗时不到1ms,比外部API调用快几个数量级,示例代码如下:
// 计算两个经纬度之间的球面直线距离,返回单位为km
function calcHaversineDistance(start, end) {
  const EARTH_RADIUS = 6371;
  const dLat = (end.lat - start.lat) * Math.PI / 180;
  const dLon = (end.lng - start.lng) * Math.PI / 180;
  const a = 
    Math.sin(dLat / 2) * Math.sin(dLat / 2) +
    Math.cos(start.lat * Math.PI / 180) * Math.cos(end.lat * Math.PI / 180) * 
    Math.sin(dLon / 2) * Math.sin(dLon / 2); 
  const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)); 
  return EARTH_RADIUS * c;
}
  • 高精度场景部署离线路径服务:如果需要道路级距离且覆盖范围固定,可以本地部署OSRM等开源离线路径计算服务,完全不走外部API接口,单次1000个点的计算耗时可以控制在几十ms级别。

4 后端服务逻辑优化

  • 调整网络请求配置:给API调用设置合理的超时时间,避免无效等待,同时调整Node.js事件循环相关配置,避免IO等待阻塞后续请求处理。
  • 异步化处理大流量请求:如果接口请求量较大,可以把距离计算逻辑拆成异步任务,接口接收到请求后先返回任务ID,计算完成后再通过推送或者前端轮询的方式返回结果,避免接口长时间挂起触发超时。

内容的提问来源于stack exchange,提问作者Rahul Midha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.21 23:36:09