【问题标题】:Calculate speed using javascript使用javascript计算速度
【发布时间】:2011-01-03 09:34:55
【问题描述】:

在下面的代码中,我试图计算图像的下载速度,但速度却是无穷大。我究竟做错了什么?

var imageAddr = "/images/image.jpg" + "?n=" + Math.random();
var startTime, endTime;
var downloadSize = 200000;
var download = new Image();
download.onload = function () {
    endTime = (new Date()).getTime();
    showResults();
}
startTime = (new Date()).getTime();
download.src = imageAddr;

function showResults() {
    var duration = Math.round((endTime - startTime) / 1000);
    var bitsLoaded = downloadSize * 8;
    var speedBps = Math.round(bitsLoaded / duration);
    var speedKbps = (speedBps / 1024).toFixed(2);
    var speedMbps = (speedKbps / 1024).toFixed(2);
    alert("Your connection speed is: \n" + 
           speedBps + " bps\n"   + 
           speedKbps + " kbps\n" + 
           speedMbps + " Mbps\n" );
}

【问题讨论】:

  • 这是纯JavaScript,去掉了不相关的标签。
  • 也可以使用测速api:speedof.me/api.html
  • 对于那些成功使用过这段 Javascript 代码的人,你最初是否遇到过没有调用“download.onload”的情况?这正是我正在经历的,我仍在试图找出原因。

标签: javascript


【解决方案1】:

只是不要将持续时间四舍五入。

 var duration = (endTime - startTime) / 1000;

【讨论】:

  • 我得到的下载速度为 13793103 bps,13469.83 kbps13.15 Mbps。这是不正确的,因为我的互联网连接限制为 3Mbps。这应该是 1.3 Mbps
  • 首先,您必须确保发送的图像没有经过 gzip 压缩,因为这样会加快速度(不多,但不准确)。然后,您需要确保您拥有正确的downloadSize 号码。最后,确保图片文件不在localhost上。
  • 下载大小是多少?
  • 您使用的图像的大小(以字节为单位)。它的尺寸更大,等待时间更长,准确性更高。
  • @Rajeev 听起来像是在本地服务器本身上执行测试,因此您正在测量网络或硬盘速度。将此代码托管在某个远程服务器上,然后您将获得真正的结果。
【解决方案2】:

duration 的结果可能是 0,正数除以零产生 JavaScript 中正无穷大的特殊值。

【讨论】:

  • 这就是我猜的,但最终值 speedBps , speedKbps, speedMbps 都是无穷大并且这些不除以持续时间
  • speedBps 的计算方式如下:var speedBps = Math.round(bitsLoaded / duration);。如果duration 为0,那么speedBps 将是无穷大。而且由于其他两个速度变量是从speedBps 计算出来的,所以它们也将是无穷大。
【解决方案3】:

想一想:endTimestartTime[ms] 中,所以他们的区别也在毫秒。

图片加载时间300 ms的示例:

Math.round((endTime - startTime) / 1000);
-> Math.round(300 / 1000);
-> Math.round(0.3);
-> 0

Math.round 排除在 sn-p 之外。

然后正如其他人所说,duration = 0 将导致

speedBps = bitsLoaded / duration
-> speedBps = bitsLoaded / 0
-> speedBps = Infinity

但是,请注意,您无法获得这样的准确结果。以您的示例cannot be measured 为例,存在延迟、连接时间、第一个字节的时间等,对于图像 1 MB,它们将导致非常不准确的结果。

【讨论】:

  • 如何由此判断上传/下载限制
  • 我已经测试了这种方法和几种类似的技术,但很少能从数字中获得有意义的结果。在我的测试中,中小型文件和大型文件产生了截然不同的下载率。人们会期望类似的费率 - 所以我认为费率不是一个准确的衡量标准,可以得出关于速度的结论......
【解决方案4】:

因为你的持续时间接近于 0, 那你应该试试

var 持续时间 = (endTime - startTime)/1000;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-28
    • 2013-07-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多