返回顶部
首页 > 资讯 > 前端开发 > 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://lsjlt.com/news/125447.html(转载时请注明来源链接)

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

猜你喜欢
  • 如何用JavaScipt测网速
    目录前言前端判断网速的原理总结1.通过img加载或者发起Ajax请求计算网速2.window.navigator.connection.downlink网速查询3. 一般来说,通过请...
    99+
    2024-04-02
  • 使用JavaScipt怎么测网速
    这篇文章给大家介绍使用JavaScipt怎么测网速,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。JavaScript是什么JavaScript是一种直译式的脚本语言,其解释器被称为JavaScript引擎,是浏览器的一...
    99+
    2023-06-15
  • 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
    云服务器
  • 租用美国服务器如何测试网速
    测试美国服务器的网速可以通过以下步骤进行: 使用在线网速测试工具:可以通过一些在线网速测试工具来测试美国服务器的网速,比如Spe...
    99+
    2024-04-09
    美国服务器 服务器
  • 使用iperf测试网速
    使用iperf测试网速 Iperf 是一个网络性能测试工具。Iperf 可以测试最大 TCP 和 UDP 带宽性能,具有多种参数和 UDP 特性,可以根据需要调整,可以报告带宽、延迟抖动和数据包丢失。...
    99+
    2023-09-14
    网络 服务器 运维
  • CrystalDiskMark如何测速
    这篇文章主要介绍了CrystalDiskMark如何测速的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇CrystalDiskMark如何测速文章都会有所收获,下面我们一起来看看吧。CrystalDiskMark...
    99+
    2023-07-05
  • crystaldiskinfo如何测速
    这篇“crystaldiskinfo如何测速”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“...
    99+
    2023-02-09
    crystaldiskinfo
  • win7如何检测网速和网络连通状态
    本篇内容介绍了“win7如何检测网速和网络连通状态”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!检测方法:使用组合快捷键win键+r键打开运...
    99+
    2023-06-28
  • 美国服务器如何测试网络速度
    美国服务器测试网络速度的常用方法有:1、在美国服务器中打开DOS命令窗口,使用ping命令进行测试;2、在美国服务器的DOS命令窗口中使用tracert命令进行测试;3、利用Which Loads Faster Fast Soft工具测试网...
    99+
    2024-04-02
  • 如何测试美国服务器网络速度
    美国服务器测试网络速度的常用方法有:1、在美国服务器中打开DOS命令窗口,使用ping命令进行测试;2、在美国服务器的DOS命令窗口中使用tracert命令进行测试;3、利用Which Loads Faster Fast Soft工具测试网...
    99+
    2024-04-02
  • 电脑如何测试网速稳定不稳定
    要测试电脑的网速稳定性,可以采取以下方法:1. 使用网速测试工具:下载速度测试工具,如Speedtest等,通过测试下载和上传速度来...
    99+
    2023-09-12
    电脑
  • JavaScript如何测试速度
    JavaScript是一种脚本语言,现在被广泛应用于网页开发、游戏开发等领域。在开发JavaScript时,测试代码的执行速度变得越来越重要,因为速度可以大大影响用户在网站上的体验,特别是在移动设备上。这篇文章将介绍JavaScript如何...
    99+
    2023-05-14
  • 云服务器网速测试怎么测
    云服务器的网速测试需要通过一定的工具和技术来实现,以下是一些常用的云服务器网速测试方法: 流量采集:使用流量采集工具,获取各个服务的流量。可以在浏览器中输入不同的IP地址段,如192.168.1.2等,然后在浏览器中查看流量情况。 网络...
    99+
    2023-10-26
    网速 服务器 测试
  • win10如何测硬盘速度
    要测量Windows 10中硬盘的速度,可以使用以下方法:1. 使用Windows自带的性能评估工具:- 在Windows搜索栏中输...
    99+
    2023-08-23
    win10
  • 云主机怎么测网速
    测量云主机的网速可以通过以下几种方法:1. 使用网速测试工具:可以使用诸如Speedtest.net、Fast.com和Pingdo...
    99+
    2023-08-18
    云主机
  • 云服务器网速测试
    云服务器是一种虚拟的、服务器共享的云计算服务,可以通过互联网访问。它们通常使用网络加速器(如VPN或SSL)将服务器与互联网连接,以确保数据在网络上传输时能够更快的速度。 以下是一些常用的云服务器网速测试方法: 使用 CDN 服务:您可...
    99+
    2023-10-26
    网速 服务器 测试
  • 云服务器网速测试怎么测试
    云服务器网速测试是通过测试网络的响应时间和稳定性来评估服务器的性能和稳定性的。下面列出了一些可能有用的云服务器网速测试工具: Meter:这是最基本的云服务器网速测试工具,包括三个参数:服务器端口、请求大小和服务器负载。Meter可以计...
    99+
    2023-10-26
    测试 网速 服务器
  • 云服务器网速测试怎么测的
    云服务器的网速测试需要进行一定的操作,下面是一个简单的步骤: 选择合适的网络设备:云服务器通常包括两个或多个主要网络设备:互联网连接和局域网连接。选择合适的网络设备将有助于测试结果的准确性。 选择合适的云服务器:选择与您的主机服务器网络...
    99+
    2023-10-26
    网速 服务器 测试
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作