广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >如何用JavaScipt测网速
  • 248
分享到

如何用JavaScipt测网速

2024-04-02 19:04:59 248人浏览 八月长安
摘要

目录前言前端判断网速的原理总结1.通过img加载或者发起ajax请求计算网速2.window.navigator.connection.downlink网速查询3. 一般来说,通过请

前言

事情是这样的,最近尝试写一个通过判断当前网速,从而在前端控制范围请求去分步请求一个大型文件的库。这个东东我现在一行代码都还没写,除了突然发现这个需求的思路有些不太实际之外,另一个原因是我突然问自己——前端要怎么判断网速啊?? ? !

前端判断网速的原理总结

(注:下面求的网速单位默认为KB/S)通过查阅相关资料,我发现思路主要是分为以下几种:

1.通过img加载或者发起Ajax请求计算网速

通过请求一个和服务端同域的文件,例如图片等,在前端开始请求和收到响应两个时间点分别通过Date.now标记start和end,因为Date.now得出的是1970年1月1日(UTC)到当前时间经过的毫秒数,所以我们通过end - start求出时间差(ms),然后通过计算:

文件大小(KB) * 1000 /( end -start )

就可以计算出网速了(KB/S)。

而请求文件又有两种方法:通过img加载或者AJAX加载:

  • 通过创建img对象,设置onload监听回调,然后指定src, 一旦指定src,图片资源就会加载,完成时onload回调就会调用,我们可以根据时机分别标记start和end。
  • 通过AJAX进行请求,即创建XHR对象,在onreadystatechange回调里,判断当readystate = 4时候加载完成,根据时机分别标记start和end。

2.window.navigator.connection.downlink网速查询

我们还可以通过一些H5的先进api去实现,例如这里我们可以使用的是window.navigator.connection.downlink 去查询,但是正如你所知道的是,这类API都是一副德性,即老生常谈的兼容性问题,所以我们一般都是作为一种预备的手段,通过能力检测,能用就用它,不能用就通过别的方法。而且需要注意downlink的单位是mbps,转化成KB/S的公式是

navigator.connection.downlink * 1024 / 8

乘1024可以理解,为什么后面要除8呢?这是因为mbps里的b指的是bit(比特),KB/s里面的B指的是Byte(字节),1字节(b)=8比特(bit),所以需要除个8

3. 一般来说,通过请求文件测算网速

单次可能会有误差,所以我们可以请求多次并计算均值。

前端判断网速的方法及其优缺点

  • img加载测速:借助img对象加载测算网速。优点:没有跨域带来的问题。缺点:(1)要自己测文件大小并提供参数fileSize,(2)文件必须为图片 (3)文件大小不能灵活控制
  • Ajax测速: 通过Ajax测算网速。 优点: (1)不用提供文件大小参数,因为可以从response首部获得(2)测试的文件不一定要是图片,且数据量能灵活控制。缺点:跨域问题
  • downlink测速: 通过navigator.connection.downlink读取网速。优点:不需要任何参数。缺点:1.兼容性很有问题,2.带宽查询不是实时的,具有分钟级别的时间间隔
  • 综合实现:先尝试采用downlink测速,否则多次AJAX测速并求平均值

img加载测速


function getSpeedWithImg(imgUrl, fileSize) {
    return new Promise((resolve, reject) => {
        let start = null;
        let end = null;
        let img = document.createElement('img');
        start = new Date().getTime();
        img.onload = function (e) {
            end = new Date().getTime();
            const speed = fileSize * 1000 / (end - start)
            resolve(speed);
        }
        img.src = imgUrl;
    }).catch(err => { throw err });
}

Ajax测速


function getSpeedWithAjax(url) {
    return new Promise((resolve, reject) => {
        let start = null;
        let end = null;
        start = new Date().getTime();
        const xhr = new XMLHttpRequest();
        xhr.onreadystatechange = function () {
            if (xhr.readyState === 4) {
                end = new Date().getTime();
                const size = xhr.getResponseHeader('Content-Length') / 1024;
                const speed = size * 1000 / (end - start)
                resolve(speed);
            }
        }
        xhr.open('GET', url);
        xhr.send();
    }).catch(err => { throw err });
}

downlink测速


function getSpeedWithDnlink() {
    // downlink测算网速
    const connection = window.navigator.connection;
    if (connection && connection.downlink) {
        return connection.downlink * 1024 / 8;
    }
}

综合测速


function getNetSpeed(url, times) {
    // downlink测算网速
    const connection = window.navigator.connection;
    if (connection && connection.downlink) {
        return connection.downlink * 1024 / 8;
    }
    // 多次测速求平均值
    const arr = [];
    for (let i = 0; i < times; i++) {
        arr.push(getSpeedWithAjax(url));
    }
    return Promise.all(arr).then(speeds => {
        let sum = 0;
        speeds.forEach(speed => {
            sum += speed;
        });
        return sum / times;
    })
}

以上代码我发了一个npm包,可以通过下载


npm i network-speed-test

使用方式


import * from 'network-speed-test';
getSpeedWithImg("/file/imgs/upload/202211/12/ukbsealf232.jpg", 8.97).then(
    speed => {
        console.log(speed);
    }
)

getSpeedWithAjax('./speed.jpg').then(speed => {
    console.log(speed);
});

getNetSpeed('./speed.jpg', 3).then(speed => {
    console.log(speed);
});

getSpeedWithDnlink();

npm包地址

https://www.npmjs.com/package/network-speed-test

github地址

https://github.com/penghuwan/network-speed-test

以上就是如何用JavaScipt测网速的详细内容,更多关于用JavaScipt测网速的资料请关注编程网其它相关文章!

--结束END--

本文标题: 如何用JavaScipt测网速

本文链接: https://www.lsjlt.com/news/125447.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 如何用JavaScipt测网速
    目录前言前端判断网速的原理总结1.通过img加载或者发起Ajax请求计算网速2.window.navigator.connection.downlink网速查询3. 一般来说,通过请...
    99+
    2022-11-12
  • 使用JavaScipt怎么测网速
    这篇文章给大家介绍使用JavaScipt怎么测网速,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。JavaScript是什么JavaScript是一种直译式的脚本语言,其解释器被称为JavaScript引擎,是浏览器的一...
    99+
    2023-06-15
  • 使用iperf测试网速
    使用iperf测试网速 Iperf 是一个网络性能测试工具。Iperf 可以测试最大 TCP 和 UDP 带宽性能,具有多种参数和 UDP 特性,可以根据需要调整,可以报告带宽、延迟抖动和数据包丢失。...
    99+
    2023-09-14
    网络 服务器 运维
  • Linux下如何使用speedtest-cli测试网速
    小编给大家分享一下Linux下如何使用speedtest-cli测试网速,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!speedtest-cli 是一个使用pyt...
    99+
    2023-06-27
  • 如何使用Speedtest CLI测试你的网速
    如何使用Speedtest CLI测试你的网速,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。我们将使用一个名为speedtest-cli的命令行工具来测试网速。它是用Pytho...
    99+
    2023-06-05
  • 如何测试云服务器网速
    要测试云服务器的网速,可以采取以下几种方法:1. 使用在线网速测试工具:使用网上提供的在线网速测试工具,如Speedtest、Fas...
    99+
    2023-09-27
    云服务器
  • win7如何检测网速和网络连通状态
    本篇内容介绍了“win7如何检测网速和网络连通状态”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!检测方法:使用组合快捷键win键+r键打开运...
    99+
    2023-06-28
  • crystaldiskinfo如何测速
    这篇“crystaldiskinfo如何测速”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“...
    99+
    2023-02-09
    crystaldiskinfo
  • CrystalDiskMark如何测速
    这篇文章主要介绍了CrystalDiskMark如何测速的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇CrystalDiskMark如何测速文章都会有所收获,下面我们一起来看看吧。CrystalDiskMark...
    99+
    2023-07-05
  • 电脑如何测试网速稳定不稳定
    要测试电脑的网速稳定性,可以采取以下方法:1. 使用网速测试工具:下载速度测试工具,如Speedtest等,通过测试下载和上传速度来...
    99+
    2023-09-12
    电脑
  • 如何测试美国服务器网络速度
    美国服务器测试网络速度的常用方法有:1、在美国服务器中打开DOS命令窗口,使用ping命令进行测试;2、在美国服务器的DOS命令窗口中使用tracert命令进行测试;3、利用Which Loads Faster Fast Soft工具测试网...
    99+
    2022-10-18
  • 美国服务器如何测试网络速度
    美国服务器测试网络速度的常用方法有:1、在美国服务器中打开DOS命令窗口,使用ping命令进行测试;2、在美国服务器的DOS命令窗口中使用tracert命令进行测试;3、利用Which Loads Faster Fast Soft工具测试网...
    99+
    2022-10-08
  • JavaScript如何测试速度
    JavaScript是一种脚本语言,现在被广泛应用于网页开发、游戏开发等领域。在开发JavaScript时,测试代码的执行速度变得越来越重要,因为速度可以大大影响用户在网站上的体验,特别是在移动设备上。这篇文章将介绍JavaScript如何...
    99+
    2023-05-14
  • 第十八节 使用JPerf 工具测试网速
    iPerf 与JPerf 在讲解网络测速之前,我们先来了解一下测速的工具:iPerf 是一个跨平台的网络性能测试工具,它支持Win/Linux/Mac/Android/iOS 等平台,iPerf 可以...
    99+
    2023-08-31
    网络 服务器 tcp/ip lwip stm32
  • win10如何测硬盘速度
    要测量Windows 10中硬盘的速度,可以使用以下方法:1. 使用Windows自带的性能评估工具:- 在Windows搜索栏中输...
    99+
    2023-08-23
    win10
  • 在Linux终端如何快速检测网站是否宕机
    这篇文章主要为大家展示了“在Linux终端如何快速检测网站是否宕机”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“在Linux终端如何快速检测网站是否宕机”这篇文章吧。方法 1:使用 fping ...
    99+
    2023-06-16
  • 怎么在Linux系统中使用Speedtest测试网速
    怎么在Linux系统中使用Speedtest测试网速?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。安装speedtest-cli测试本机所在网络出口的带宽,访问Speendte...
    99+
    2023-06-12
  • Linux中常用的网络测速工具有哪些
    这篇文章主要介绍Linux中常用的网络测速工具有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!fastfast 是 Netflix 提供的一项服务,它不仅可以通过命令行来使用,而且可以直接在 Web 端使用:fa...
    99+
    2023-06-27
  • 如何测试服务器速度
    测试服务器速度的方法:1、在服务器后台终端命令窗口中使用tracert命令进行测试;2、在服务器中打开DOS命令窗口,使用ping命令进行测试;3、使用GTmetrixgtmetrix网站速度测试工具对服务器进行网站速度测试;4、利用Whi...
    99+
    2022-10-20
  • 怎么在Linux系统下使用tespeed应用测试网速
    本篇内容介绍了“怎么在Linux系统下使用tespeed应用测试网速”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!许多电脑呆子知道可以用sp...
    99+
    2023-06-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作