检查某人的带宽并根据它加载内容

Pau*_*aul 8 javascript bandwidth content-delivery-network

我已经看到了一些没有回答这个问题的问题,是否可以使用java脚本检查某些带宽并根据它加载特定内容?

BBC似乎在使用我的手机和不知名的地方给我低质量的图像.

通过这个酷的服务看起来这和它的CDN所以它可以是服务器端.

http://www.resrc.it/docs/

有谁知道他们是怎么做到的?或者我如何使用asp.net或javascript或社区开源插件来做到这一点.

我认为这可能与https://github.com/yahoo/boomerang/有关,但不确定这是它的真正目的.

Mor*_*ler 7

基本上你这样做:

  • 启动计时器
  • 通过ajax调用加载固定大小的文件,例如图像
  • 停止计时器
  • 取一些样本并计算平均坏宽度

像这样的某些东西可以起作用:

//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);
});
Run Code Online (Sandbox Code Playgroud)

var xmlHttp = new XMLHttpRequest();并不适用于所有浏览器,您应该检查UserAgent并使用正确的

当然它只是估计值.

下面是一个JSBin示例