前端如何判断用户的网络质量,可以通过浏览器原生的API:navigator.connection

761 阅读1分钟

1.判断用户的网络质量

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

注意:如果用户连接的是wifi、5G、4G,控制台打印的都是4g 切成离线模式的话,打印的也是4g,但是它的带宽变为0了

可以在控制台Network通过切换网络状态,在控制台打印出当前的网络质量信息

image.png

image.png

image.png

2.应用场景

需求:根据当前用户使用的网络类型(质量),给用户的体验做一个降级

完整实现代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <!-- 需求:网络好的话,页面加载视频;网络差的话,页面加载图片 -->
    <div class="home">
        <div>网络状态判断</div>
        <div id="fast">
            <video src="" width="500px" height="500px" class="theatre" autoplay muted playsinline control>
                <source src="./image/test.mp4" type="video/mp4">
            </video>
        </div>
        <div id="slow">
            <img class="theatre" src="./image/1.jpg" alt="">
        </div>

    </div>
    <script>
        let domId = "fast";
        if(/\slow-2g|2g|3g/.test(navigator.connection.effectiveType)){
            domId = "slow";
        }else{
            domId = "fast"
        };
        document.getElementById(domId).style.display = "block";


        // 前端如何判断用户的网络质量,浏览器原生的API:navigator.connection
        function onConnectionChange(){
            const { rtt,downlink,effectiveType,saveData } = navigator.connection;
            console.log(`有效网络连接类型:${effectiveType}`); // 2g  3g  4g(如果用户连接的是wifi、5G、4G,这里打印的都是4g)
            console.log(`估算的下行速度/带宽:${downlink}Mb/s`);
            console.log(`估算的往返时间:${rtt}ms`);
            console.log(`打开/请求数据保护模式:${saveData}`);
        }
        navigator.connection.addEventListener('change',onConnectionChange);
    </script>
</body>
</html>