Ответ 1
duration
, вероятно, выходит 0, а положительное число, деленное на ноль, дает специальное значение положительной бесконечности в 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("Your connection speed is: \n" +
speedBps + " bps\n" +
speedKbps + " kbps\n" +
speedMbps + " Mbps\n" );
}
duration
, вероятно, выходит 0, а положительное число, деленное на ноль, дает специальное значение положительной бесконечности в JavaScript.
Подумайте об этом: endTime
и startTime
находятся в [ms]
, поэтому их различие также находится в ms.
Пример с загрузкой изображения за 300 мс:
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
Но, обратите внимание, что вы не можете получить точные результаты. Существует латентность, время соединения, время до первого байта и т.д., Которые не могут быть измерены в вашем примере и для изображения < 1 МБ, они приведут к очень неточным результатам.
Просто не округлите продолжительность.
var duration = (endTime - startTime) / 1000;
потому что ваша продолжительность близка к 0, то вы должны попробовать
var duration = (endTime - startTime)/1000;