基本上你这样做:
- 启动计时器
- 通过 ajax 调用加载固定大小的文件,例如图像
- 停止计时器
- 取一些样本并计算平均 badwidth
像这样的东西可以工作:
//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);
});
并非这不适var xmlHttp = new XMLHttpRequest();
用于所有浏览器,您应该检查 UserAgent 并使用正确的
当然,它只是一个估计值。
这是一个JSBin示例