JavaScript 通过 navigator.connection API 动态适配网络类型,实时获取 effectiveType、downlink、rtt 等指标并监听变化,据此调整超时、压缩、缓存、降级等策略,需兼容兜底且所有判断必须同步完成。

JavaScript 在接口请求中处理客户端网络类型动态适配,核心是利用 navigator.connection API 获取实时网络信息(如有效带宽、往返时延、是否为慢速连接),并据此调整请求行为——比如超时阈值、是否启用压缩、是否降级加载、是否走 mock 或缓存策略等。它不是简单“判断 4G/5G”,而是基于真实连接质量做响应式决策。
读取并监听网络状态变化
现代浏览器支持 navigator.connection(需 HTTPS 或 localhost 环境),可获取 effectiveType('slow-2g' / '2g' / '3g' / '4g')、downlink(Mbps)、rtt(毫秒)等关键指标:
- 用
connection.addEventListener('change', handler)监听网络切换(如从 Wi-Fi 切到移动数据) - 首次获取时直接读取
navigator.connection.effectiveType,避免延迟等待 - 注意兼容性:Safari 支持较晚(iOS 16.4+ / macOS 13.3+),需加兜底逻辑
动态调整请求超时时间
慢网下延长超时,快网下收紧,避免无效等待或过早失败:
-
slow-2g或2g:设为 15–30 秒 -
3g:设为 8–12 秒 -
4g或Wi-Fi:设为 3–5 秒 - 也可用
downlink做线性计算:Math.max(3000, 10000 - (downlink || 1) * 1000)
按网络类型优化请求策略
不只是调超时,还可联动其他行为:
立即学习“Java免费学习笔记(深入)”;
- 慢网下自动禁用非关键请求(如埋点、推荐接口、图片预加载)
- 对
effectiveType === 'slow-2g',优先返回本地缓存或骨架屏,跳过首屏数据拉取 - 上传场景中,慢网下自动分片、启用断点续传,并降低并发数
- 结合 Service Worker,在弱网时 fallback 到离线缓存或降级 JSON 数据结构(如省略字段)
兜底与渐进增强设计
不能依赖 navigator.connection 一定可用:
- 检测不到时,默认按中等网络(如 3g)保守处理
- 首屏加载前无法监听 change 事件?可先用
getNetworkInfo()同步获取一次作为初始值 - 避免在关键路径做异步等待——所有判断必须同步完成,不影响请求发起时机
- 敏感操作(如支付提交)不因网络类型降级功能,只优化非阻塞行为


















