一起养成写作习惯!这是我参与「掘金日新计划 · 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 事件。