在下面的代码中,我试图计算图像的下载速度,但速度是无穷大。我究竟做错了什么?
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" );
}
答案 0 :(得分:8)
考虑一下:endTime
和startTime
位于[ms]
,因此它们的差异也是以毫秒为单位。
300 ms的图像加载示例:
Math.round((endTime - startTime) / 1000);
-> Math.round(300 / 1000);
-> Math.round(0.3);
-> 0
将Math.round
从代码段中删除。
然后正如其他人所说duration = 0
将导致
speedBps = bitsLoaded / duration
-> speedBps = bitsLoaded / 0
-> speedBps = Infinity
但是,请注意您无法获得这样的准确结果。存在延迟,连接时间,到第一个字节的时间等,您的示例cannot be measured以及图像< 1 MB 会导致非常不准确的结果。
答案 1 :(得分:7)
duration
可能会出现0,正数除以零会产生JavaScript中正无穷大的特殊值。
答案 2 :(得分:6)
只是不要围绕持续时间。
var duration = (endTime - startTime) / 1000;
答案 3 :(得分:3)
因为你的持续时间接近0, 那你应该试试
var duration =(endTime - startTime)/ 1000;