背景
原创内容
前端获取设备网速、网络信息
前端开发
浏览器原理
2023-04-18
7分钟
71
头像
Dean
前端开发

当我们的产品需要监测网络质量的时候,你还在想是不是和后端商量弄一个网络质量检测接口?

在过去,我们可以通过发送网络请求来评估用户的连接速度以及设备是否处于蜂窝网络状态等等。但现在有了 Network Information API,可以从客户端获取网络连接和设备相关信息。它提供了一种方式来检测和响应设备网络的状态变化。我们的设备在不同的网络环境下,网速的表现各不相同。

现在的 web 应用程序越来越依赖于网络,用户体验也与网络连接质量有着密切的关系。因此,我们需要了解当前设备网络的状态、连接速度等信息,以便优化用户体验。下面给大家介绍本篇主角:

使用方法

Network Information API(简称NIA)提供了一个 Navigator 对象,其中包含一个 connection 属性。下面的代码片段演示了如何打印当前网络的类型、速度和以及当前设备的在线状态。

javascript 复制代码
//获取connection
console.log(navigator.connection);

返回结果类似于:

javascript 复制代码
{
  downlink: 10,
  effectiveType: "4g",
  onchange: null,
  rtt: 50,
  saveData: false,
  type: "wifi" //台式机不带无线网卡可能不存在该属性
}

其中包含了以下几个属性:

  • downlink:以兆比特每秒(Mbps)计的下行速度,即从服务器下载数据的速率。
  • downlinkMax:网络基础设施允许的最大下行速度。
  • effectiveType:可用连接的最佳层面的字符串。可能的值包括:slow-2g2g3g4g
  • rtt:往返时间(ms),从设备到服务器和返回的时间。
  • type:表示当前设备的网络类型。可能的值包括:bluetoothcellularethernetnonemixedotherunknownwifi
  • saveData:表示设备是否正在使用网络代理来保存数据。默认为 false

为了监视网络的变化,我们可以使用 onchange() 方法。当不同的网络状态被检测到时,该方法将被调用。

javascript 复制代码
function networkChange(event) {
  console.log("当前网络更改", event.target.connection);
}

navigator.connection.onchange = networkChange;

当网络连接状态变化时,这个回调函数将被触发。通过设置 onchange() 方法,我们可以在网络状态发生改变时做出相应的处理。

兼容性

目前,Network Information API 在手机端和桌面端上得到了广泛支持,参考下表:

Chrome Firefox Safari iOS Safari Chrome Android Samsung Internet
支持 61+ 59+ 11+ 11.3+ 68+ 9.0+
部分支持 14+
未支持 60- 58- 11.2- 67- 8.2-

在移动 Web 时代,Network Information API 可以为我们提供灵敏的网络状态变化监测机制,以便我们及时响应用户的网络变化。但是,Network Information API 存在部分兼容性问题,并不能在所有浏览器中都得到支持。