• Javascript网络状态获取与监听


    在以前,我们经常可能需要用到获取或者监听当前的网络状态,并根据当前的网络状态做一些对应的操作,比如网络慢的时候我们加载图片质量有所降低的图片,网络状态良好的时候加载更清晰的图片,再比如当网络切换,比如从网络状态改变的时候给用户一些提示,但碍于浏览器原生并没有提供相关的API,所以我们只能另辟蹊径,比如弄一个通用测速接口,通过计算请求从发起到结束的时间来判断当前的网速,这种方式虽然看起来能实现检测当前的网络状态,但效率不高,不能实时反馈,有延迟,而且结果也并不是那么准确,好消息是Network Information API来了,通过Network Information API我们就可以轻易的获取和监听当前的网络状态,下面介绍一下使用方式。

    获取和监听网络状态主要用的是navigator中的connection属性,首先我们将navigator.connection打印出来:

    从上图中,我们可以看到下navigator.connection有downlink,effectiveType,onchange,rtt,saveData几个属性,那么他们分别代表什么呢?

    1、downlink 估算的下行速度/带宽

    2、effectiveType 当前的网络连接类型

    其中effectiveType的取值可能是'slow-2g'、'2g'、'3g'或者'4g'。在网速慢的时候,此功能可以让你通过提供较低质量的资源来提高页面的加载速度,通过它获得的网络类型是最接近的蜂窝网络连接类型(比如 2G),即使你实际连接的是WiFi,但你的有效网络类型可能是2G或者3G。

    3、onchange 看命名我们就知道这是一个回调函数,在网络状态发生改变后执行

    4、rtt 估算的往返时间

    5、saveData 打开/请求数据保护模式

    使用方式

    首先我们可以直接获取当前的网络状态:

    1
    console.log(navigator.connection.effectiveType); // slow-2g/2g/3g/4g

    监听网络状态的改变:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    onConnectionChange() {
        const { rtt, downlink, effectiveType, saveData } = navigator.connection;
        console.log(`有效网络连接类型: ${effectiveType}`);
        console.log(`估算的下行速度/带宽: ${downlink}Mb/s`);
        console.log(`估算的往返时间: ${rtt}ms`);
        console.log(`打开/请求数据保护模式: ${saveData}`);
    }
     
    navigator.connection.addEventListener('change', onConnectionChange);

    我们可以通过浏览器开发者工具中network的模拟网络功能来快速测试网络类型的改变。

    怎么样,是不是很惊喜?不过有点遗憾的是到目前为止,不是所有浏览器都支持这一新特性,下面我们看一下这个新特性的浏览器支持情况

    可以看出IE是不支持的,Edge支持情况不明,到目前为止Safari也还暂时不支持这一特性,所以依然路遥遥,还有很多路需要走,但是并不是我们就不能使用这一特性了,在前端开发中有一个名词叫“优雅降级”,我们可以在支持这一特性的浏览器使用,不支持的情况下还是使用我们之前那种比较笨的办法。

  • 相关阅读:
    TCP 传递信息
    如何在数据源是空的时候,gridview显示表头(万能)
    (orm1)O/R Mapping在实际中用于什么方面最有优势?[转]
    web service 数据传输有什么限制? 为什么?DataTable可以作为web service参数传递么?90
    C#对象的 Xml序列化与反序列化
    题目:当点击按钮时,如何实现两个td的值互换?【js】
    4.如何获取动态生成的SL控件的NAME值(二)
    gridview排序加箭头(二)
    我们没有在一起
    (orm 2) LINQ与ORM
  • 原文地址:https://www.cnblogs.com/songfengyang/p/15675649.html
Copyright © 2020-2023  润新知