网络状态监控
前端 window
有一个内置 API 方法可以用于监控用户的网络状态、延迟和带宽等数据。下面简单看一下该属性的介绍。
前置知识
Navigator:connection 属性
实验性: 这是一项
在将其用于生产之前,请仔细检查实验性技术 https://developer.mozilla.org/zh-CN/docs/MDN/Writing_guidelines/Experimental_deprecated_obsolete#实验性。浏览器兼容性表格 https://developer.mozilla.org/zh-CN/docs/Web/API/Navigator/connection#浏览器兼容性Navigator.connection
只读属性返回一个包含有关系统网络连接信息的对象,例如用户设备的当前带宽或连接是否按流量计费。`NetworkInformation` https://developer.mozilla.org/zh-CN/docs/Web/API/NetworkInformation这可以用于基于用户的连接状态来选择高清晰度内容或低清晰度内容。
值
一个
对象。包含的属性如下:`NetworkInformation` https://developer.mozilla.org/zh-CN/docs/Web/API/NetworkInformationeffectiveType
:网络类型rtt
:延迟,单位是毫秒downlink
:带宽速度
具体效果如下图所示:
Window:online 事件
当浏览器能够访问网络,且
的值被设为`Navigator.onLine` (en-US) https://developer.mozilla.org/en-US/docs/Web/API/Navigator/onLinetrue
时,接口的`Window` https://developer.mozilla.org/zh-CN/docs/Web/API/Windowonline
事件将被触发。备注: 该事件不能用于确定某个网站可否访问。网站自身问题或防火墙都有可能阻止对特定网站的访问。
是否冒泡 否 是否可取消 否 接口 `Event` https://developer.mozilla.org/zh-CN/docs/Web/API/EventEvent handler property ononline
示例代码:
js// addEventListener version window.addEventListener('online', (event) => { console.log('You are now connected to the network.') }) // ononline version window.ononline = (event) => { console.log('You are now connected to the network.') }
效果实现
因此可以利用上方的 API 方法实现需要的效果,代码如下:
function getNetworkInfo() {
let info
if (navigator.onLine) {
info = {
type: navigator.connection.effectiveType,
rtt: navigator.connection.rtt,
downlink: navigator.connection.downlink
}
}
else {
type: 'offLine'
}
return info
}
如何检测到信息变化呢?
- 如果是想要检测当前是否在线,可以通过
online
和offline
事件实现。 - 如果想检测网络状态的变化,上面的方法不再适用,可以通过
navigator.connection
的change
方法实现。
代码如下:
window.addEventListener('online', () => {
// ...
})
window.addEventListener('offline', () => {
// ...
})
navigator.connection.addEventListener('change', () => {
// ...
})