在 watcheffect 中通过监听 navigator.connection.effectivetype 变化感知网络质量退化(如 4g→3g、wifi→蜂窝、high latency/low bandwidth),结合降级规则、防抖、页面可见性及 offline/online 事件,实现轻量、不干扰的降级提示。

在 watchEffect 中同步设备网络类型变化并触发降级提示,关键不是监听“网络是否在线”,而是感知 网络质量退化(如从 4G/5G 降为 3G、WiFi 切换为蜂窝、或检测到高延迟/低带宽),并在变化时主动展示轻量级提示(如顶部横幅或 toast),同时避免干扰用户操作。
监听 navigator.connection.effectiveType 变化
现代浏览器提供 navigator.connection API,其中 effectiveType(如 '4g'、'3g'、'2g'、'slow-2g')可反映当前估算的网络能力。该属性是响应式的,但需手动包装为 ref 才能被 watchEffect 追踪:
- 首次访问时读取当前值,并创建一个 ref 包裹它(如
const networkType = ref(navigator.connection?.effectiveType || 'unknown')) - 监听
navigator.connection的change事件,在事件回调中更新该 ref,从而触发watchEffect响应 - 注意兼容性:Safari 部分版本不支持,需加
if ('connection' in navigator)判断
定义降级规则与提示逻辑
不是所有网络类型变化都需要提示,重点是识别“体验明显下降”的场景,例如:
递归分析 Vue 项目组件依赖,从入口文件生成组件层级图,支持 Vue 2/3,输出组件名、文件路径和属性。适用于分析组件结构、排查依赖或了解项目架构。
- 从
'4g'或'wifi'降为'3g'或更低 - 从任意类型变为
'slow-2g' - 检测到
downlink (Mbps)且 <code>rtt > 500(ms)
在 watchEffect 内部,对比新旧 effectiveType,结合阈值判断是否触发降级提示;提示内容应明确(如“网络较慢,部分功能可能延迟”),并可选提供“继续使用”或“切换网络”操作入口。
控制提示频率与交互体验
网络类型可能频繁抖动(尤其在边缘区域),需防止重复弹出:
- 使用防抖(如 3 秒内只触发一次)或节流(如每 30 秒最多一次)限制提示频次
- 记录最近一次提示时间戳,相同降级等级不再重复提示(例如已提示过“3g”,不再因同为“3g”再次提醒)
- 页面失焦(
document.hidden === true)时暂停监听,恢复可见后重新校准状态 - 提示组件自身支持手动关闭,且 5 秒后自动消失,不阻塞后续操作
补充离线与弱网兜底策略
watchEffect 监听的是“降级”,但真正断连需靠 online/offline 事件。建议组合使用:
- 用
window.addEventListener('offline')单独处理完全断网,展示更强提示(如“已离线,部分功能不可用”) - 当网络恢复(
online)时,清除降级状态并重置提示计数器 - 对关键请求(如提交表单)做双保险:发送前检查
navigator.onLine和effectiveType,失败时按实际原因分类反馈
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!









