js判断用户当前网络状态和判断网速


前端必备工具推荐网站(免费图床、API和ChatAI等实用工具):
http://luckycola.com.cn/


一、第一种是通过 HTML5 提供的 navigator 去检测网络

(1)、原理介绍:

通过window.navigator.onLine属性,返回的是布尔值。true表示在线,false表示离线。onLine属性只能简单判断网络的断开和连接状态,而不能监听网络状态的变化,例如从4g到3g。

     if (window.navigator.onLine) {
       console.log('网络正常!');
     } else {
          console.log('网络中断!');
     }

(2)、兼容性

在这里插入图片描述

二、监听window.ononline和window.onoffline事件:

<script type="text/javascript">
    window.addEventListener("offline",function(){alert("网络连接恢复");})
    window.addEventListener("online",function(){alert("网络连接中断");})
</script>`

或者这样写

<script type="text/javascript">
    window.ononline=function(){alert("网络连接恢复");}
    window.onoffline=function(){alert("网络连接中断");}
</script>

三、通过ajax进行请求判断(兼容性好-推荐)

(1)、原理介绍:

这种方式的原理是通过ajax请求一张较小的资源和资源返回消耗的时长计算出当前网络的速度,所以兼容性较好,也可以得到具体的网速值,是一种比较好的解决方案

(2)、注意:

但是这种方案有一个注意点就是用来测速的图片资源必须小(十几K足够了),因为太大会导致测速耗时过长导致业务阻塞

/ 判断网速 kb
export function measureBW(): Promise<number> {
    return new Promise((resolve, reject) => {
        let startTime = 0;
        let endTime = 0;
        let fileSize = 0;
        let xhr = new XMLHttpRequest();
        let measureTimerStatus = false;
        let measureTimer = setTimeout(() => {
            if (!measureTimerStatus) {
                resolve(50);
            };
        }, 5000);
        xhr.onreadystatechange = () =>{
            if(xhr.readyState === 2){
                startTime = Date.now();
            }
            if (xhr.readyState === 4 && xhr.status === 200) {
                endTime = Date.now();
                fileSize = xhr.responseText.length;
                // console.log(fileSize);
                let speed = fileSize  / ((endTime - startTime) / 1000) / 1024;
                // console.log('measureBW res:', speed);
                measureTimerStatus = true;
                measureTimer && clearTimeout(measureTimer);
                resolve(Math.floor(speed));
            }
        }
        xhr.open("GET", "https://www.google.com.hk/images/branding/googlelogo/2x/googlelogo_color_92x30dp.png?id=" + Math.random(), true);
        xhr.send();
        xhr.onerror = () => {
            measureTimer && clearTimeout(measureTimer);
            measureTimerStatus = true;
            resolve(50)
        }
    });
}

四、navigator.connection方法监听网络变化

(1)、原理介绍:

能监听到具体的网络变化(例如从4g变化到了3g),但不能监听到是离线状态还是在线状态。

在这里插入图片描述

const connection = navigator.connection || navigator.mozConnection || navigator.webkitConnection;

connection.addEventListener('change', () => {
    // connection.effectiveType返回的是具体的网络状态:4g/3g/2g
    console.log(connection.effectiveType);
});
(2)、兼容性:

connection的兼容性比较低,谨慎选择使用
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LuckyCola2023

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值