Checking someones bandwidth and loading content based on it

后端 未结 4 1690
慢半拍i
慢半拍i 2021-02-14 21:36

I have seen a number of questions that don\'t answer this, is it possible to check someones bandwidth using java script and load specific content based on it?

The BBC se

4条回答
  •  北海茫月
    2021-02-14 22:25

    Basically you do this like this:

    • Start a timer
    • Load an fixed size file e.g a image through an ajax call
    • Stop the timer
    • Take some samples and compute the average badwidth

    Somethign like this could work:

    //http://upload.wikimedia.org/wikipedia/commons/5/51/Google.png
    //Size = 238 KB
    function measureBW(cnt, cb) {
        var start = new Date().getTime();
        var bandwidth;
        var i = 0;
        (function rec() {
            var xmlHttp = new XMLHttpRequest();
            xmlHttp.open('GET', 'http://upload.wikimedia.org/wikipedia/commons/5/51/Google.png', true);
    
            xmlHttp.onreadystatechange = function () {
                if (xmlHttp.readyState == 4) {
                    var x = new Date().getTime() - start;
                    bw = Number(((238 / (x / 1000))));
                    bandwidth = ((bandwidth || bw) + bw) / 2;
                    i++;
                  if (i < cnt) {
                    start = new Date().getTime();rec();
                  }
                    else cb(bandwidth.toFixed(0));
                }
            };
            xmlHttp.send(null);
        })();
    
    }
    
    measureBW(10, function (e) {
        console.log(e);
    });
    

    Not that var xmlHttp = new XMLHttpRequest(); won't work on all browsers, you should check for the UserAgent and use the right one

    And of course its just an estimated value.

    Heres a JSBin example

提交回复
热议问题