一、延迟与网速

通过js加载一张1x1的极小图片,测试出图片加载的所用的时长。如果换一个几百KB的图片,则可心用来计算下载网速

document.write('<input type="button" value="停止计时" οnclick="clearTimeout(timeid) " />   ');
document.write('<input type="button" value="继续计时" οnclick="ld()" />   ');
document.write('<div id="msg">正在测试网络延迟,请稍后...</div>');
var n = 0,tcp,timeid;
var ld = function() {var tcp,t = ( + new Date),img = new Image;img.onload = function(){var tcp =( + new Date) - t;n=n+1;console.log(n + ':  ' + tcp + '    ' + ( + new Date));document.getElementById("msg").innerText=tcp;if(n<100) timeid=setTimeout("ld()", 2000);}img.src = "png_1x1.png?" + Math.random(); //一张200多B的图片
};
ld();

但是,第一次加载图像时,它将比后续加载花费更长的时间,即使我们确保图像没有被缓存。因为第一次在两个主机(在我们的例子中是浏览器和服务器)之间打开TCP连接时,它们需要“握手”。一旦建立连接,它就会保持打开状态,直到两端都通过类似的握手决定关闭它。我们现在可以稍微修改我们的代码以考虑TCP握手的时间,并相应地测量延迟。

document.write('<input type="button" value="停止计时" οnclick="clearTimeout(timeid) " />   ');
document.write('<input type="button" value="继续计时" οnclick="ld()" />   ');
document.write('<div id="msg">正在测试网络延迟,请稍后...</div>');
var n = 0,tcp,timeid;
var ld = function() {var tcp,t = ( + new Date),img = new Image;img.onload = function(){var tcp =( + new Date) - t;n=n+1;console.log(n + ':  ' + tcp + '    ' + ( + new Date));document.getElementById("msg").innerText=tcp;if(n<100) timeid=setTimeout("ld()", 2000);}img.src = "png_1x1.png?" + Math.random();
};
var img_start = new Image;
img_start.onload = function(){ld();}
img_start.src = "png_1x1.png?" + Math.random();

同类版本实例

<!doctype html>
<html>
<head>
<meta http-equiv=Content-Type content="text/html;charset=utf-8">
<title>js实现的网速测试方法</title>
</head>
<body><script>document.write("<div id='div1'>正在下载测速图片,请稍后...</div>");var szsrc = "https://upload.wikimedia.org/wikipedia/commons/5/51/Google.png?id="+Math.round();var st = new Date();document.write(" <IMG height=300 alt=测试图片 src='"+szsrc+"'  width=400 οnlοad=showspeed() >");function showspeed(){var fs = 1.46*1024;  //图片文件大小(KB)var l = 2;    //小数点的位数var et = new Date();alltime = fs*1000/(et - st)Lnum = Math.pow(10,l)calcspeed = Math.round(alltime*Lnum)/Lnumdocument.getElementById("div1").innerHTML = "您的下载速度为:"+calcspeed+" (KB/秒)  带宽约" + Math.round(calcspeed/128*Lnum)/Lnum  + "M";}
</script>
</body>
</html>

注意,下载图片大小要合适,且要把大小写入代码中,还有大小是1024进制的。还有延迟和网速都与服务器有关,图片地址可心用比较大的公司没有防盗链图片

二、AJAX版

ajax版的有两个好处,一是图片文件大小js可以自己读取,二是当然是异步啦。。。

<!doctype html>
<html>
<head>
<meta http-equiv=Content-Type content="text/html;charset=utf-8">
<title>js实现的网速测试方法</title>
</head>
<body>
<script>
function measureBW(fn) {var startTime, endTime, fileSize;var xhr = new XMLHttpRequest();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);var speed = fileSize  / ((endTime - startTime)/1000) / 1024;fn && fn(Math.floor(speed))}}xhr.open("GET", "https://upload.wikimedia.org/wikipedia/commons/5/51/Google.png?id=" + Math.random(), true);xhr.send();
}measureBW((speed)=>{document.write("<div id='div1'>"+speed + " KB/s</div>");console.log(speed + " KB/s");  //215 KB/sec
})
</script>
</body>
</html>

同样,考虑到http请求需要建立连接,以及等待响应,这些过程也会消耗一些时间,所以以上的方法可能不会准确的检测出网络带宽。

我们可以同时发出多次请求,来减少http请求建立连接,等待响应的影响,参考如下代码:

function measureBW(fn,time) {time = time || 1;var startTime, endTime, fileSize;var count = time ;var _this = this;function measureBWSimple () {var xhr = new XMLHttpRequest();xhr.onreadystatechange = () => {if (xhr.readyState === 4 && xhr.status === 200) {if(!fileSize){fileSize = xhr.responseText.length;}count --;if(count<=0){endTime = Date.now();var speed = fileSize * time  / ((endTime - startTime)/1000) / 1024;fn && fn(Math.floor(speed));}}}xhr.open("GET", "https://upload.wikimedia.org/wikipedia/commons/5/51/Google.png?" + Math.random(), true);xhr.send();}startTime = Date.now();for(var x = time;x>0;x--){measureBWSimple()}
}measureBW((speed)=>{console.log(speed + " KB/sec");  //913 KB/sec
},10)

同理可用1像素图还测延迟

三、API类

在 Chrome65+ 的版本中,添加了一些原生的方法可以检测有关设备正在使用的连接与网络进行通信的信息。

参考如下代码,我们就可以检测到网络带宽:

function measureBW () {return navigator.connection.downlink;
}
measureBW() ;

navigator.connection.downlink 会返回以(兆比特/秒)为单位的有效带宽估计值(参考MDN),这和我们常用的(KB/sec)有所差别,所以我们需要再做一下单位换算,参考如下代码:

function measureBW () {return navigator.connection.downlink * 1024 /8;   //单位为KB/sec
}
measureBW() ;

我们还可以通过 navigator.connection 上的 change 事件来监听网络带宽的变化:

navigator.connection.addEventListener('change', measureBW());

相关链接:

https://baijiahao.baidu.com/s?id=1620927782246861487&wfr=spider&for=pc

https://juejin.im/post/5b4de6b7e51d45190d55340b

再上一个,不错的收藏

    document.write('<div id="msg">正在测试网络延迟,请稍后...</div>');document.write('<a href="#">电信网路</a>    <span class="classtime" xl-name="电信网路"></span><br>');document.write('<a href="#">联通网路</a>    <span class="classtime" xl-name="联通网路"></span>');var jump=1,t={},autourl=new Array(),autoname=[];autourl[1]="http://image.baidu.com/"; //这个是电信服务器站点autourl[2]="https://www.baidu.com/"; //这个是联通服务器站点autoname[1]="电信网路";autoname[2]="联通网路";(function(){for(var i=1;i<autourl.length;i++){var img = new Image;//img.οnerrοr= auto(autourl[i]);img.οnerrοr= (function(j){return function(){t[autourl[j]] =(new Date())- t[autourl[j]];  //记入时间差console.log(autourl[j] + "    :" + t[autourl[j]] + "ms"); //console.log(t[url] + "ms");document.querySelector('[xl-name="'+autoname[j]+'"]').innerHTML =  t[autourl[j]] + ' ms';console.log(jump);if(jump) {jump=0;document.getElementById("msg").innerText = '3秒后进入【' + autoname[j] + '】';//setTimeout(function(){top.location=url;},3000); //setTimeout("top.location='" + url + "';",3000);   //3s 即3000ms setTimeout(function(){window.location.replace(autourl[j]);},3000);}}})(i);//闭包传值img.src = autourl[i] + Math.random();t[autourl[i]] = (+new Date());//记录开始载入时间}})();

转载于:https://www.cnblogs.com/7qin/p/10203457.html

JS 测试网络速度与网络延迟相关推荐

  1. Android判断网络速度

    在Android设备上判断网络速度可以分为两个步骤:获取网络类型和测量网络速度. 1.获取网络类型 首先,我们需要检查设备的网络连接类型,例如WiFi或移动数据.为了实现这个功能,我们需要使用Conn ...

  2. 服务器租用前如何测试网络速度?

    随着互联网的高速发展,投入到IDC行业的服务商是越来越多,但是在鱼龙混杂的服务器市场上免不了有些服务商鱼目混珠,以次充好,所以用户在租用服务器前还是要通过一些检查来进行确定的,服务器在使用中的速度对于 ...

  3. 游戏延迟测试软件,官方发布游戏延迟测试工具将优化网络

    原标题:官方发布游戏延迟测试工具将优化网络 英雄联盟是一个不怎么吃电脑配置的游戏,毕竟是2009年发布的游戏,虽然在今年更新的新版客户端,但底层代码和游戏引擎仍然不太占据电脑运行空间.但对于英雄联盟这 ...

  4. 游戏延迟测试软件,官方发布游戏延迟测试工具 将优化LOL网络

    2017-9-2 7:35:45    文章来源:TGBUS    作者:skykidult 导读英雄联盟是一个不怎么吃电脑配置的游戏,毕竟是2009年发布的游戏,虽然在今年更新的新版客户端,但底层代 ...

  5. 游戏延迟测试软件,官方发布游戏延迟测试工具 将优化网络

    英雄联盟是一个不怎么吃电脑配置的游戏,毕竟是2009年发布的游戏,虽然在今年更新的新版客户端,但底层代码和游戏引擎仍然不太占据电脑运行空间.但对于英雄联盟这种即时对战游戏,最重要的还是游戏延迟问题,当 ...

  6. 网络急速诊断,快速测试网络速度

    网络速度是我们日常生活和工作中非常重要的一部分.如果正在寻找一种简单而又高效的方法来测量你的网络速度,可以使用Python来进行网速测试,通过使用speedtest库来实现. 不仅如此,我们还将演示如 ...

  7. STM32F407 STM32F407 LWIP速度优化测试速度可以达到1万kb每秒 相当于80兆的网络速度

    STM32F407 LWIP速度优化测试 使用的板子是正点原子的探索者 STM32F407ZGT6. STM32F407 LWIP速度优化,测试速度可以达到1万kb每秒, 相当于80兆的网络速度. 差 ...

  8. 测试VPS服务器脚本,一检测VPS网络速度,硬盘性能等

    购买新的VPS或者服务器都要进行一番的测试,测试机器的配置和性能,测试VPS服务器的网络速度,硬盘性能等.这里收集一些测试脚本,脚本均来自于网络,代码内有作者信息,感谢网络大神们提供这么优秀的工具. ...

  9. 如何在JMeter负载测试中模拟不同的网络速度

    移动终于超越了桌面流量 - 这种趋势看起来有望上升.但这对我们意味着什么? 对于初学者来说,这意味着现在,我们比以往任何时候都更需要在运行性能测试时关注移动用户.如果我们的移动网站或应用程序表现不佳 ...

最新文章

  1. 中国互联网+固体饮料行业商业模式创新与投资机会深度研究报告
  2. 算法(5) 归并排序
  3. C# 入门经典 第三版 下载。
  4. NAVICAT MYSQL 建表字段 默认值、EMPTY STRING、空白、NULL 的区别
  5. 10个Python编程窍门,不懂就亏了
  6. 利用Python发送短信,用处多多
  7. Pinyin4NET 发布到 NUGET 服务器
  8. [渝粤教育] 西南科技大学 数据库应用 在线考试复习资料(5)
  9. 2018谷歌学术影响因子发布:CVPR排名泛AI领域第一
  10. 高德地图语音助手实测:驾车导航基本实现动口不动手
  11. 操作系统-io设备基本概念和分类
  12. DELL 灵越系列笔记本 1427 更换显示屏
  13. 桥接模式 和 中继模式
  14. 服务器自动ip使用,自动或手动设置IP地址图解教程
  15. 20个常用教育心理学效应
  16. 买土豆的故事(转中外管理)
  17. VSLAM之边缘化 Marginalization 和 FEJ (First Estimated Jocobian)
  18. java throw异常_Java throw Exception实现异常转换
  19. Kylin - 框架介绍
  20. ] 爆笑囧人囧事2009大合集![

热门文章

  1. 桌面 计算机 网络连接怎么办,电脑显示不安全网络连接失败怎么办
  2. 改善睡眠失眠10大方法,让你失眠一招入睡
  3. 2014年校园招聘新签约工资待遇
  4. 实现一个B站弹幕不挡人物的效果
  5. win10电脑计算机内存不足,win10系统电脑总是提示“计算机的内存不足”的恢复方案...
  6. 朋友圈评论、点赞测试点
  7. js打印三角形超详解
  8. IB数学HL/SL考试大纲简单介绍
  9. PTA 租用游艇问题
  10. 关键信息基础设施确定指南_干货分享 | 关键信息基础设施运营单位如何做好业务安全测试...