使用JavaScript计算速度

9 浏览
0 Comments

使用JavaScript计算速度

在下面的代码中,我尝试计算图像的下载速度,但速度显示为无穷大。我做错了什么?

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("您的连接速度为:\n" + 
           speedBps + " bps\n"   + 
           speedKbps + " kbps\n" + 
           speedMbps + " Mbps\n" );
}

0
0 Comments

使用JavaScript计算速度的问题是因为在计算过程中没有考虑到单位的转换。endTime和startTime的单位都是毫秒,它们的差值也应该是毫秒。在给出的示例中,图片加载时间为300毫秒,但在计算速度时,将其除以1000,导致结果为0,从而得到了错误的速度。同样地,将duration设置为0会导致速度计算结果为无穷大。

然而,需要注意的是,通过这种方法无法得到准确的结果。还有延迟、连接时间、首字节时间等因素无法通过此方法进行测量,对于小于1MB的图片,这些因素会导致非常不准确的结果。

关于如何确定上传/下载限制

我已经使用这种方法和其他几种类似的技术进行了测试,但几乎没有从数据中得到有意义的结果。在我的测试中,小、中、大文件的下载速度差异非常大。人们本来期望它们的下载速度相似,因此我认为速度不是一个能够准确反映速度的测量标准。

0
0 Comments

在上述内容中,问题的原因是因为变量duration的值可能为0,当一个正数除以0时,JavaScript会返回一个特殊值,即正无穷大。

为了解决这个问题,需要确保duration的值不为0。

0
0 Comments

No, it is not an accurate computation of the network speed. The calculated speed is higher than the actual internet connection speed.

0