How to detect internet speed in JavaScript?

前端 未结 9 1488
萌比男神i
萌比男神i 2020-11-22 01:56

How can I create a JavaScript page that will detect the user’s internet speed and show it on the page? Something like “your internet speed is ??/?? Kb/s”.

9条回答
  •  广开言路
    2020-11-22 02:51

    It's better to use images for testing the speed. But if you have to deal with zip files, the below code works.

    var fileURL = "your/url/here/testfile.zip";
    
    var request = new XMLHttpRequest();
    var avoidCache = "?avoidcache=" + (new Date()).getTime();;
    request.open('GET', fileURL + avoidCache, true);
    request.responseType = "application/zip";
    var startTime = (new Date()).getTime();
    var endTime = startTime;
    request.onreadystatechange = function () {
        if (request.readyState == 2)
        {
            //ready state 2 is when the request is sent
            startTime = (new Date().getTime());
        }
        if (request.readyState == 4)
        {
            endTime = (new Date()).getTime();
            var downloadSize = request.responseText.length;
            var time = (endTime - startTime) / 1000;
            var sizeInBits = downloadSize * 8;
            var speed = ((sizeInBits / time) / (1024 * 1024)).toFixed(2);
            console.log(downloadSize, time, speed);
        }
    }
    
    request.send();
    

    This will not work very well with files < 10MB. You will have to run aggregated results on multiple download attempts.

提交回复
热议问题