Рассчитать скорость с помощью JavaScript - PullRequest
14 голосов
/ 03 января 2011

В приведенном ниже коде я пытаюсь вычислить скорость загрузки изображения, но скорость получается бесконечностью.Что я делаю неправильно?

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" );
}

Ответы [ 4 ]

8 голосов
/ 03 января 2011

Только подумайте: endTime и startTime в [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

Но , обратите внимание, что вы не можете получить точные результаты, как это.Существует задержка, время соединения, время до первого байта и т. Д., Которые не могут быть измерены по вашему примеру, а для изображения <<em> 1 МБ они приведут к очень неточным результатам.

7 голосов
/ 03 января 2011

duration, вероятно, выходит 0, а положительное число, деленное на ноль, дает специальное значение положительной бесконечности в JavaScript.

6 голосов
/ 03 января 2011

Только не округляйте продолжительность.

 var duration = (endTime - startTime) / 1000;
3 голосов
/ 27 июля 2011

потому что ваша продолжительность близка к 0, тогда вы должны попробовать

var duration = (endTime - startTime) / 1000;

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...