不常用的浏览器 API — Network Information API

416 阅读2分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第2天,点击查看活动详情

本系列文章会介绍一系列不常用的浏览器 API,本文要介绍的是 Network Information API,通过名字就可以知道这部分 API 是与网络状况相关的。

功能

Network Information API 位于 navigator 上,我们可以通过 navigator.connection 来访问,它返回的是一个 NetworkInformation 对象,上面有一系列和网络状况有关的内容信息:

  • downlink:返回网络带宽。
  • fownlinkMax:返回最大下载速度。
  • effectiveType:返回网络类型 2g、3g、4g 等,这个值是根据实际检测到的网络情况计算出的。
  • rtt:数据往返时间。
  • saveData:返回用户是否开启减少数据使用选项(通常手机浏览器有省流功能开关)。
  • type:返回连接类型,bluetooth、cellular、ethernet、none、wifi、wimax、other、unknown。

此外还有一个 change 事件可以监测网络状况变化情况。

整个 Network Information API 就这么多内容,如果需要在应用中对网络状况添加条件判断很方便,如用户非 wifi 时关闭后台下载,低网速时切换小图模式等。

主要注意的是这部分 API 目前的完整程度还不是很好,有一些检测拿不到结果,我自己实测在 mac chrome 连接 wifi 时拿到的 type 是 unknown,因此这种实验 API 目前在生产环境下还是不要使用了。

使用

由于这个 API 还不是很好用,来看一个简单的例子:

const connection = navigator.connection;
const type = connection.effectiveType;

function updateConnectionStatus() {
  console.log("Connection type changed from " + type + " to " + connection.effectiveType);
  type = connection.effectiveType;
}

connection.addEventListener('change', updateConnectionStatus);

这里使用到了 change 事件,当网络发生变化时会触发事件回调,注意这里不一定是切换了网络,有可能是网络状况发生了转化,比如在本例中,当检测到网络质量由坏变好时,effectiveType 值可能会由 3g 变为 4g,在这种场景下同样会触发 change 事件。